`
langgufu
  • 浏览: 2288808 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate的session.connection被session.dowork()替代

阅读更多

Hibernate3.3.2版本中getSession().connection()已被弃用,替代方法SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection()

来自类org.springframework.orm.hibernate3.SessionFactoryUtils

例子:

java.sql.Connection c = null;
java.sql.PreparedStatement ps = null;
java.sql.ResultSet rs = null;

public List method(String sql) {
List ret = new ArrayList();
try {
c = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
ps = c.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()) {
.....
}
ret.add(ro);
}
} catch (Exception e) {
e.printStackTrace();

} finally {
close();
}
return ret;
}

Hibernate API中让使用doWork(Work,work),描述如下:

connection()
Deprecated. (scheduled for removal in 4.x). Replacement depends on need; for doing direct JDBC stuff use doWork(org.hibernate.jdbc.Work); for opening a 'temporary Session' use (TBD).

Work接口的execute()方法用于执行直接通过JDBC API来访问数据库的操作:
public interface Work {
//直接通过JDBC API来访问数据库的操作
public void execute(Connection connection) throws SQLException;
}
Session的doWork(Work work)方法用于执行Work对象指定的操作,即调用Work对象的execute()方法。Session会把当前使用的数据库连接传给execute()方法。

过程如下:

Transaction tx=session.beginTransaction();
//定义一个匿名类,实现了Work接口
Work work=new Work(){
public void execute(Connection connection)throws SQLException{
//通过JDBC API执行用于批量更新的SQL语句
PreparedStatement stmt=connection
.prepareStatement("update CUSTOMERS set AGE=AGE+1 "
+"where AGE>0 ");
stmt.executeUpdate();
}
};

//执行work
session.doWork(work);
tx.commit();

当通过JDBC API中的PreparedStatement接口来执行SQL语句时,SQL语句中涉及到的数据不会被加载到Session的缓存中,因此不会占用内存空间。

分享到:
评论

相关推荐

    hibernate中session对象的状态详解

    hibernate中session对象的状态详解

    System.SR.dll 无法显示错误信息

    在PDA开发时经常会遇到下面的错误,原因是缺少一个dll,只要在项目中引用这个dll就可以获得错误的描述,然后...位于 System.Net.Connection.doConnect() 位于 System.Net.Connection.connect() at WorkItem.doWork()

    文件切割器 文件合并器

    API开放:程序开放了三个API,分别为FileX.DoWork.Divide、FileX.DoWork.CombineByFirst、FileX.DoWork.CombineByList。这些API可供您编程时调用,以便让您更快捷地实现您的需要的功能 本程序基于.NET Framework ...

    全面掌握 Hibernate 框架技术

    Hibernate简介、Session API、对象的状态 查询操作(主键查询、HQL查询、Criteria查询、SQL查询、命名查询、doWork) 关联关系:多对一、一对多、多对多、一对一 组件映射、继承映射、缓存、JPA 反向工程、封装...

    软件测试白盒测试

    用逻辑覆盖测试方法测试以下程序段 ...void DoWork (int x,int y,int z){ 1 int k=0, j=0; 2 if ( (x>3)&&(z) ) 3 { 4 k=x*y-1; 5 j=sqrt(k); 6 } 7 if((x==4)||(y>5)) 8 j=x*y+10; 9 j=j%3; 10 }

    worker-pool:在node.js中分发工作

    工人池在node.js中分发工作安装> npm install @davvo/worker-pool例子// adder.js...pool.doWork({a: 28, b: 14}).then(function (sum) { console.log( " The answer is " , sum) ;}) ;异步工人pool.handle(function

    async-profile.zip

    async-profile 是一个 Node.js 的 CPU 分析器扩展。可以通过各种方法来分析出你的代码执行所占用的 CPU 时间。...Promise.try(doWork).finally(function () {  p.stop(); }); 标签:async

    WCF(C#源码)一共两个

    WCF的源码。。。。。。。。。。。。。。。。。。。。。。。。。。。

    JPA全面讲解

    JPA全面讲解,这是一个很全面的例子,值得学习

    c#使用命名管道实现打印调试

    backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork); backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); backgroundWorker....

    简易的读卡程序

    利用此程序可以简单的金进行读取卡片操作 private void button1_Click(object ... System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(DOWork)); thread.Start(); }

    Java的23种设计模式疯狂Java总结.doc

    } ConcreteProduct public class StudentWork implements Work { public void doWork() { System.out.println("学生*作业!"); } } public class TeacherWork implements Work { public void doWork() { System.out....

    一个VC多线程的例子

    这是一个VC多线程编程的例子,总共四个程序,内附详细说明。

    backgroudWorker——Demo.rar

    backgroudWorker 控件用法demo,包括Dowork,ProgressChanged,RunWorkerCompleted事件的用法demo,比较简单的demo.

    白盒测试用例练习.docx

    白盒测试用例练习

    Vs线程框架

    任务执行类通过继承基类WorkItemBase之后使用多态函数DoWork来完成真实任务 2.创建信号量(多线程同步使用) /*在信号量上我们定义两种操作: Wait(等待) 和 Release(释放)。 当一个线程调用Wait操作时,它...

    Winform智能提示效果

     private void bgWorker_DoWork(object sender, DoWorkEventArgs e) { e.Result=GetDataFromDB(); } 在RunWorkerCompleted事件中写入 private void bgWorker_RunWorkerCompleted(object sender, ...

    软件测试_逻辑覆盖测试_实验报告.doc

    软件测试_逻辑覆盖测试_实验报告 使用逻辑覆盖测试方法测试 int DoWork (int x,int y,int z,int k,int j) { 1 if ( (x>3)&&(z) ) 2 { 4 k=x*y-1; 5 j=k-z; 6 } 7 if((x==4)||(y>5)) 8 j=x*y+10; 9 j=j%3; }

    Android ProgressBar 简单进度条的实现及示例下载.rar

    此为Android ProgressBar 简单进度条的实现及示例下载源码,基本思路是:将模拟任务分成大小为100个的数组,任务完成度--默认为0,状态完成度默认也为0,然后构造一个线程用于显示消息,然后定义dowork()函数,完成...

    InstallPackageWPF:WPF自定义设置

    假如安装包是4.0版本,你的执行程序要求版本较高(4.0以上),可以将较高版本的.net framework拷贝到Resources的Environmental目录下,然后打开MainWindow.xaml.cs文件,找到Worker_DoWork函数,然后去掉里面注释的...

Global site tag (gtag.js) - Google Analytics