前段时间在开发中,在开发遇到一个问题,就要批量更新数据库中的数据,开始采用的是把数据库中要更新的数据,通过Hibernate创建对象的方式加载到内存中,然后执行相应的更新,后来发现这样是有问题的,在数据量少的情况下,效率还可以,如果要更新的数据量大的时候,执行速度就很慢了,究其原因,主要把要更新的数据通过创建对象的方式加载到内存中的时候耗费了大量的内存资源,才导致效率低下。幸亏发现的早,如果该应用上线一段时间,数据量很大的时候,在执行与之相关的操作时,就有可能导致系统崩溃。所以需要优化,因为在本应用中是批量更新,所以就想到用原始的SQL语句去执行更新。因为本应用用的是Hibernate,所以就涉及到如何用Hibernate来执行原始SQL的问题。以下是我采用的做法:
public void batchUpdate(String year,String state) throws Exception { SessionFactory sessionFactory=getHibernateTemplate().getSessionFactory(); Session session=sessionFactory.openSession(); Transaction tx=session.beginTransaction(); Connection conn=session.connection(); PreparedStatement stmt=conn.prepareStatement("update regioncountyfactory t set t.state="+state+" where t.year="+year); stmt.executeUpdate(); tx.commit(); }
这样做其实就还原到原始JDBC的做法了,执行原始的SQL自然不在话下了。