Hibernate执行原始sql(备忘)

前段时间在开发中,在开发遇到一个问题,就要批量更新数据库中的数据,开始采用的是把数据库中要更新的数据,通过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自然不在话下了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值