Hibernate3.3.2版本中getSession().connection()已被弃用,hibernate4中官方推荐使用Session doWork()方法进行jdbc操作

首先看看Work接口类的定义

public interface Work {
//Execute the discrete work encapsulated by this work instance using the supplied connection.
//@param connection The connection on which to perform the work.
// @throws SQLException Thrown during execution of the underlying JDBC interaction.
// @throws HibernateException Generally indicates a wrapped SQLException.
public void execute(Connection connection) throws SQLException;
}

具体代码如下:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement; import org.hibernate.Session;
import org.hibernate.jdbc.Work;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestDoWork(){
public void testSessionDowork() throws Exception {
Session session = getSession();
final String sql="select * from t_cp_user";
try{
session.beginTransaction();
session.doWork(
//定义一个匿名类,实现了Work接口
new Work() {
public void execute(Connection connection) throws SQLException {
//经由过程JDBC API执行SQL语句
PreparedStatement ps = connection.prepareStatement( sql );
ResultSet rs = ps.executeQuery();
try {
ResultSetMetaData metadata = rs.getMetaData();
while (rs.next()) {
user.setUserId(rs.getLong("USER_ID"));
user.setUsername(rs.getString("USERNAME"));
}
}
finally {
doClose(null,ps,rs);
}
}
}
);
session.getTransaction().commit();
//session.close();
}catch(Exception ex){
log.error(ex,ex);
}
finally{
this.doClose(session, null, null);
}
}
//释放数据资源 by rhine protected void doClose(Session session, Statement stmt, ResultSet rs){
if(rs != null){
try {
rs.close();
rs=null;
} catch (Exception ex) {
rs=null;
log.error(ex,ex);
ex.printStackTrace();
}
}
// Statement对象关闭时,会自动释放其管理的一个ResultSet对象
if(stmt != null){
try {
stmt.close();
stmt=null;
} catch (Exception ex) {
stmt=null;
log.error(ex,ex);
ex.printStackTrace();
}
}
// 当Hibernate的事务由Spring接管时,session的关闭由Spring管理.不用手动关闭
// if(session != null){
// session.close();
// }
}

hibernate4中使用Session doWork()方法进行jdbc操作(代码)的更多相关文章

  1. hibernate4中取得connection的方法

    在hibernate3中,使用了c3p0连接池,尝试了多种办法取得connection对象,以下两种可以使用. Java代码  Connection conn; // 方法1:hibernate4中将 ...

  2. 【JAVA学习】struts2的action中使用session的方法

    尊重版权:http://hi.baidu.com/dillisbest/item/0bdc35c0b477b853ad00efac 在Struts2里,假设须要在Action中使用session.能够 ...

  3. Hibernate的xml方法配置和操作代码

    一.gradle中包: compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.12.Final' compile ...

  4. Java中的文件和stream流的操作代码

    1.Java中FileRead方法的运用代码及详解 package example2;import java.io.FileReader;import java.io.IOException;clas ...

  5. 解析Asp.net Core中使用Session的方法

    2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Core中引 ...

  6. Spring中获取Session的方法汇总

    Spring: web.xml <listener> <listener-class>org.springframework.web.context.request.Reque ...

  7. Java中清空session的方法

    session.removeAttribute("sessionname")是清除SESSION里的某个属性. session.invalidate()是让SESSION失效. 或 ...

  8. flask中的session对象方法

    'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys ...

  9. Hibernate二次学习二----------session.flush、session.doWork

    目录 1. session 2. session.flush 3. session.doWork 4. 完整代码 5. 总结 © 版权声明:本文为博主原创文章,转载请注明出处 1. session H ...

随机推荐

  1. ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

    看图:

  2. static关键字总结

      static,即静态声明.它在 作用域.存储方式.生命周期 等各方面影响一个变量或函数.文章将从 局部变量.全局变量.普通函数.类的static成员(包括数据成员与成员函数)来总结static. ...

  3. 华硕笔记本之secure boot

    在ubuntu下安装cuda的时候,一直装不好,cuda-7.5.run已经装好了,但是编译cuda的例程时失败,提示cuda的库链接不上. 初步判断是secure boot的问题,因为在开启X的情况 ...

  4. 【VS2013】设定Nuget代理

    @tags "visual studio 2013" nuget vs2013中用nuget想必是一件很爽的事情,就像java里面用maven来安装各种包一样.有时候网络不好,nu ...

  5. BZOJ4423 [AMPPZ2013]Bytehattan

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  6. UOJ147 斗地主

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...

  7. VisualSVN Server和Subversion的联系

    VisualSVN Server是只能在Windows平台上搭建的SVN服务器,内核使用的是Subversion,做了整合:apache+subversion+WMI(实现操作界面等). 用这个的好处 ...

  8. “SQLServerAgent当前未运行”问题解决

    在执行SQLServer计划任务的时候,出现了如下所示的错误: 解决方法: 配置工具--sqlserver 配置管理器--SQLSERVER服务--右侧最下面--点击启动AGENT即可

  9. [iOS 视频流开发-获得视频帧处理]

    调用视频流所使用框架:<Foundation/Foundation.h> 必须定义的参数: 1.AVCaptureDevice(捕获设备:前置.后置摄像头等) 2.AVCaptureInp ...

  10. pom中定义某jar包的依赖,但并不使用该jar包,那最后部署的应用中会有这个jar包么?

    关于这个问题,首先得明确这个jar包的依赖是怎么定义的,我们知道在maven的pom文件中,会有:dependencymanagement和dependency2个部分   一般我们说在depende ...