Hibernate优化方法一:批量修改和删除
在Hibernate 2中,如果需要对任何数据进行修改和删除操作,都需要先执行查询操作,在得到要修改或者删除的数据后,再对该数据进行相应的操作处理。在数据量少的情况下采用这种处理方式没有问题,但需要处理大量数据的时候就可能存在以下的问题:
◆占用大量的内存。
◆需要多次执行update/delete语句,而每次执行只能处理一条数据。
以上两个问题的出现会严重影响系统的性能。因此,在Hibernate 3中引入了用于批量更新或者删除数据的HQL语句。这样,开发人员就可以一次更新或者删除多条记录,而不用每次都一个一个地修改或者删除记录了。
如果要删除所有的User对象(也就是User对象所对应表中的记录),则可以直接使用下面的HQL语句:
delete User
而在执行这个HQL语句时,需要调用Query对象的executeUpdate()方法,具体的实例如下所示:
String HQL="delete User";
Query query=session.createQuery(HQL);
int size=query.executeUpdate();
采用这种方式进行数据的修改和删除时与直接使用JDBC的方式在性能上相差无几,是推荐使用的正确方法。
如果不能采用HQL语句进行大量数据的修改,也就是说只能使用取出再修改的方式时,也会遇到批量插入时的内存溢出问题,所以也要采用上面所提供的处理方法来进行类似的处理。
Hibernate优化方法二:使用SQL执行批量操作
在进行批量插入、修改和删除操作时,直接使用JDBC来执行原生态的SQL语句无疑会获得最佳的性能,这是因为在处理的过程中省略或者简化了以下处理内容:
● HQL语句到SQL语句的转换。
● Java对象的初始化。
● Java对象的缓存处理。
但是在直接使用JDBC执行SQL语句时,有一个最重要的问题就是要处理缓存中的Java对象。因为通过这种底层方式对数据的修改将不能通知缓存去进行相应的更新操作,以保证缓存中的对象与数据库中的数据是一致的。