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. 【CodeForces 577C】Vasya and Petya’s Game

    链接 某个数x属于[1,n],至少询问哪些数“x是否是它的倍数”才能判断x.找出所有质因数和质因数的幂即可. #include<cstdio> #include<algorithm& ...

  2. 【LintCode】判断一个字符串是否包含另一个字符串的所有字符

    问题描述: 比较两个字符串A和B,确定A中是否包含B中所有的字符.字符串A和B中的字符都是 大写字母. 样例 给出 A = "ABCD" B = "ACD",返 ...

  3. iOS的nil,Null,NSNull的使用

    今天做项目时,在数组里面取值时,发现里面有NSNull的对象,然后用数组里面对应的对象赋值时出现各种问题,总是报错.后面经过研究和查资料,总算解决了这一问题. nil用来给对象赋值(Objective ...

  4. 转发:IT行业中的甲方乙方关系

    原文:http://byteh.blog.51cto.com/141786/1004046/ 混IT,必须理解“甲方乙方” By 韩宇斌 2012-09-23 9月初,修改了QQ签名,把“甲方乙方”放 ...

  5. 【BZOJ-1121】激光发射器SZK 物理 + 数学 + 乱搞

    1121: [POI2008]激光发射器SZK Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 682  Solved: 565[Submit][Sta ...

  6. [NOIP2013] 提高组 洛谷P1969 积木大赛

    题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...

  7. bzoj2819 Nim

    题意:给定一棵带点权的树,每次询问用一条路径上的点玩Nim游戏先手是否必胜,支持单点修改. Nim游戏:所有堆的数目异或起来不为0时先手必胜,否则必败. 所以就是单点修改+路径异或和查询. 树剖一发, ...

  8. GPU keylogger && GPU Based rootkit(Jellyfish rootkit)

    catalog . OpenCL . Linux DMA(Direct Memory Access) . GPU rootkit PoC by Team Jellyfish . GPU keylogg ...

  9. javascript 未来新方法的介绍

    JavaScript1.6数组方法的扩展 var tmp = [1, 2, 3, 4, 5, 3]; console.log('indexOf:找出数组中某一对象的下标,如果没有则为-1'); con ...

  10. mac OS(OS X)的OI编译环境配置指南

    编译环境:gdb+Atom 如何安装gdb: http://logic0.blog.163.com/blog/static/1889281462014183271283/   Atom下载地址: ht ...