在hibernate中,有一级缓存session和二级缓存sessionFactory这些机制,一方面为编码提供了便利,同时也会有一些副作用。比如有较大的数据量交互的话,缓存反而会降低效率。最近在做一个有关批量更新的程序,在调用session.update()之后,对象会保存在缓存中,如果数据量超过缓存的容量就会出错。解决方法是:在hibernate中调用jdbc批量处理的API,使用原生的jdbc来进行批量操作。

但是这里又出现了新的问题,在hibernate4中,通过session是不能直接获取到jdbc的connection。hibernate4中提供了一个session.dowork()的方法,用来处理原生的jdbc批量操作。work是一个接口,接口方法中的参数提供了jdbc的connection,只要需要用到jdbc,就用session.dowork();然后在这个方法中实现这个接口,我觉得这里的设计非常巧妙,可复用性较高。

public void setStatus(String arrMsgID[]) {
//sql语句
String updateSql = "UPDATE tb_msgboard SET status ='1' WHERE msgID =?";
//通过session获取事务
Transaction ts = hbmSession.beginTransaction();
hbmSession.doWork(
//实现work接口,work接口中有一个execute方法,connection就是这个方法的参数,也就是在这里获得jdbc的connection
new Work(){
@Override
public void execute(java.sql.Connection connection) throws SQLException {
try {
PreparedStatement stmt = connection.prepareStatement(updateSql);
//这里进行批量操作
for (int i = 0; i < arrMsgID.length; i++) {
stmt.setString(1, arrMsgID[i]);
stmt.addBatch(); // 添加到批处理命令
}
stmt.executeBatch();
ts.commit();
} catch (Exception e) {
e.printStackTrace();
ts.rollback();
HibernateUtil.closeSession(hbmSession);
}
}
});
HibernateUtil.closeSession(hbmSession);
}

hibernate4使用原生jdbc进行批处理的更多相关文章

  1. JDBC的批处理操作三种方式 pstmt.addBatch()

    package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...

  2. JDBC进行批处理

    转自 http://mousepc.iteye.com/blog/1131462 业务场景:当需要向数据库发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升 ...

  3. 使用JDBC进行批处理

    在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...

  4. JavaWeb学习总结(十一)--JDBC之批处理

    一.批处理的介绍 在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率.批处理只针对更新(增.删.改)语句,批 ...

  5. javaweb学习总结(三十六)——使用JDBC进行批处理

    在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. JDBC实现批处理有两种方式:statement和pr ...

  6. 【JAVA - SSM】之MyBatis与原生JDBC、Hibernate访问数据库的比较

    首先来看一下原生JDBC访问数据库的代码: public static void main(String[] args) { // 数据库连接 Connection connection = null ...

  7. JDBC的批处理操作三种方式

    SQL批处理是JDBC性能优化的重要武器,批处理的用法有三种. package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import ...

  8. 原生Jdbc操作Mysql数据库开发步骤

    原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤:        1.导入数据库驱动包       ...

  9. 4、原生jdbc链接数据库常用资源名

    原生jdbc链接数据库要素:#MySql:String url="jdbc:mysql://localhost:3306/数据库名";String name="root& ...

随机推荐

  1. javascript刷新父页面的各种方法汇总

    1.用iframe.弹出子页面刷新父页面iframe <script language=JavaScript> parent.location.reload(); </script& ...

  2. react+antd分页 实现分页及页面刷新时回到刷新前的page

    antd框架地址:https://ant.design/index-cn 利用antdUI框架做了个分页,其他功能都没问题,但是页面跳转后刷新会回到第一页,经过学习,在组件里增加了hash值,详情请看 ...

  3. 消除2个按钮之间1px细节引起的冲突

    1.代码 <!doctype html> <html lang="en"> <head> <meta charset="UTF- ...

  4. 测试思想 QA的价值体现

    QA的价值体现 by:授客 QQ:1033553122 1.  缺陷挖掘价值 QA人员一个很重要的价值就是在尽可能短的时间内找出尽可能多的缺陷. 某种意义上说,缺陷直观的反应了产品的质量,QA发现的有 ...

  5. 配置私有SSH

    1.cd ~/.ssh进入ssh文件夹. 2.ls,查看文件夹里面的内容 3.ssh-keygen -t rsa -C "zhanggui@marchsoft.cn” 一路回车 4.cd ~ ...

  6. 报数的golang实现

    报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: . . . . . 1 被读作 "one 1" ("一个一") , 即 11 ...

  7. java 封装及this 用法

    封装:主要用于将类中的成员名(类变量)通过 private关键字进行访问权限的设定,使用 private后,成员变量只能在当前类中进行访问,超过该类时访问提示不存在,当然也可以用于方法中,但较少.如果 ...

  8. Mysql连接错误:Mysql Host is blocked because of many connection errors

    环境:linux,mysql5.5.31错误:Host is blocked because of many connection errors; unblock with 'mysqladmin f ...

  9. Activity与view

    Activity的作用:一个Activity相当于一个容器,用于存放各种控件的容器,也可以理解为是与用户交互的接口 创建Activity的要点:  1.一个Activity就是一个类,并且这个类要继承 ...

  10. JVM的新生代、老年代、MinorGC、MajorGC

    参考资料: http://blog.csdn.net/flamezyg/article/details/44673951 http://www.blogjava.net/ldwblog/archive ...