在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. jsp使用servlet实现文件下载

    1.在index.jsp写入如下代码 <a href="demo2">下载</a> 2.在src中创建ServletDemo2类 public class ...

  2. iphone 上微信的“复制链接”功能复制出来的是修改前的链接

    问题描述: 在 iOS 系统中,用微信打开了 A 页面的链接,然后由 A 页面进入 B 页面 在 B 页面打开微信右上角菜单,使用“复制链接”功能 最后粘贴出来的链接是 A 页面的链接 分析原因: 这 ...

  3. CSS常见布局

    一.单列布局 1. 水平居中 1.1 使用inline-block和text-align .parent{text-align:center;} .child{display:inline-block ...

  4. extract-text-webpack-plugin 作用、安装、使用

    作用:该插件的主要是为了抽离css样式,防止将样式打包在js中引起页面样式加载错乱的现象 安装:插件安装命令如下: npm install extract-text-webpack-plugin -- ...

  5. 【读书笔记】iOS-属性

    assign:简单的赋值. retain:赋值之后,会调用新的retain方法和旧值的release方法. copy:表示先将值拷贝一份,然后,将这个拷贝赋值给实例变量,这个修饰词只适用于实现了NSC ...

  6. ArcGIS Server Rest 认证过程分析

    1. http://192.168.1.220:6080/arcgis/admin/login?redirect= Request URL: http://192.168.1.220:6080/arc ...

  7. Nginx 增加 Image 缩略图 功能

            Nginx 增加 Image 缩略图功能,需要使用Nginx Image 缩略图 模块     官网地址:https://github.com/3078825/ngx_image_th ...

  8. Java并发编程(十三)线程间协作的两种方式:wait、notify、notifyAll和Condition

    在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果 ...

  9. @RequestMapping --注解用法详解

    一.编码时我们总会发现如下变量未被使用的警告提示: 上述代码编译通过且可以运行,但每行前面的“感叹号”就严重阻碍了我们判断该行是否设置的断点了.这时我们可以在方法前添加 @SuppressWarnin ...

  10. centos 7.2 64位 docker安装lamp环境

    1. 删除docker可能有的早期版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docke ...