目前好多项目都使用spring的HibernateTemplate作为dao层,在实际开发中经常会遇到批量更新和删除的操作,
在hibernate2.0时代,hibernate本身并没有提供对批量更新和批量删除的支持,当执行更新或删除操作时会先执行查询将所有对象加载到内存,而后一个对象一个对象的删除或更新,如果数据量很大,不仅会占用很多内存,而且也会使数据库的效率大大降低,如果想批量的执行就只能绕开hibernate的api使用jdbc的方式。
好在hibernate3.0以后,hibernate提供了对批量更新和批量删除的支持,能够直接执行批量更新或批量删除语句,无需把被更新或删除的对象先加载到内存中。
spring(我使用的版本是2.5.X)同样提供了这方面的支持,使用方法如下:
//dao继承于HibernateDaoSupport
String updateHql = "update LadderPrice t set t.laprStatus = 0 where t.cooperatorInfo.id = 1";
String deleteHql = "delete from LadderPrice t where t.cooperatorInfo.id = 1";
//批量更新和批量删除使用的相同的方法
//批量更新
int i = dao.getHibernateTemplate().bulkUpdate(updateHql );
//批量删除
int i = dao.getHibernateTemplate().bulkUpdate(deleteHql );
//批量操作只会向数据库发送一条语句,大大提高数据库访问效率。