比较openSession和getCurrentSession这两个方法之前,我们先认识一下这两个方法。

在进行配置信息管理时,我们一般进行一下简单步骤:

Configuration cfg = new Configuration();  // 获得配置信息对象
   SessionFactory sf = cfg.configure().buildSessionFactory(); //解析并建立Session工厂

1. Session session = sf.getCurrentSession(); // 获得Session

2. Session session = sf.openSession(); // 打开Session

对于上述的两个方法,有以下区别:

1. openSession 从字面上可以看得出来,是打开一个新的session对象,而且每次使用都是打开一个新的session,假如连续使用多次,则获得的session不是同一个对象,并且使用完需要调用close方法关闭session。

2. getCurrentSession ,从字面上可以看得出来,是获取当前上下文一个session对象,当第一次使用此方法时,会自动产生一个session对象,并且连续使用多次时,得到的session都是同一个对象,这就是与openSession的区别之一,简单而言,getCurrentSession 就是:如果有已经使用的,用旧的,如果没有,建新的。

注意 :在实际开发中,往往使用getCurrentSession多,因为一般是处理同一个事务(即是使用一个数据库的情况),所以在一般情况下比较少使用openSession或者说openSession是比较老旧的一套接口了;

对于getCurrentSession 来说,有以下一些特点:

1.用途,界定事务边界

2.事务提交会自动close,不需要像openSession一样自己调用close方法关闭session

3.上下文配置(即在hibernate.cfg.xml)中,需要配置:

<property name="current_session_context_class">thread</property>

(需要注意,这里的current_session_context_class属性有几个属性值:jta 、 thread 常用 , custom、managed 少用  )

a).thread使用connection 单数据库连接管理事务

b).jta (java  transaction api) Java 分布式事务管理 (多数据库访问),jta 由中间件提供(JBoss WebLogic 等, 但是tomcat 不支持)

下面是openSession 和 getCurrentSession 简单实例的区别 :

1.openSession方式 :

import org.hibernate.Session;
   import org.hibernate.SessionFactory;
   import org.hibernate.cfg.Configuration;

import com.hibernate.model.Student;  // 注意包路径

public class StudentTest {
   public static void main(String[] args) {

Student s = new Student();
   s.setId(1);
   s.setName("s1");
   s.setAge(1);
    
   Configuration cfg = new Configuration();  // 获得配置信息对象
   SessionFactory sf = cfg.configure().buildSessionFactory(); //解析并建立Session工厂
   Session session = sessionFactory.openSession(); // 打开Session
   
   session.beginTransaction();  // 看成一个事务,进行操作
   session.save(s);  // 会找到 Student 这个类,寻找set方法
   session.getTransaction().commit(); // 提交对数据的操作
   session.close();

sf.close();

}

}

2.getCurrentSession方式 :

import org.hibernate.Session;
   import org.hibernate.SessionFactory;
   import org.hibernate.cfg.Configuration;

import com.hibernate.model.Student;  // 注意包路径

public class StudentTest {
   public static void main(String[] args) {

Student s = new Student();
   s.setId(1);
   s.setName("s1");
   s.setAge(1);
    
   Configuration cfg = new Configuration();  // 获得配置信息对象
   SessionFactory sf = cfg.configure().buildSessionFactory(); //解析并建立Session工厂
   Session session = sessionFactory.getCurrentSession(); // 打开Session
   
   session.beginTransaction();  // 看成一个事务,进行操作
   session.save(s);  // 会找到 Student 这个类,寻找set方法
   session.getTransaction().commit(); // 提交对数据的操作

sf.close();

}

}

Student 类代码 :

package com.hibernate.model;

public class Student {
 private int id;
 private String name;
 private int age;

public int getId() {
  return id;
 }

public void setId(int id) {
  this.id = id;
 }

public String getName() {
  return name;
 }

public void setName(String name) {
  this.name = name;
 }

public int getAge() {
  return age;
 }

public void setAge(int age) {
  this.age = age;
 }
}

转载于:https://www.cnblogs.com/lechance/p/4373262.html

java openSession和getCurrentSession的比较相关推荐

  1. 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持

    由openSession.getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持 Spring和Hibernate的集成的一个要点就是对事务的支持,op ...

  2. 4.openSession() 、 getCurrentSession()与session上下文

    openSession()每次都打开一个新的session,用了openSession(),要记得close()掉 getCurrentSession()在session上下文(hibernate配置 ...

  3. openSession和getCurrentSession

    在比较openSession和getCurrentSession这两个方法之前,我们先认识一下这两个方法. 在进行配置信息管理时,我们一般进行一下简单步骤: Configuration cfg = n ...

  4. Hibernate openSession() 和 getCurrentSession的区别 .

    getHiberanteTemplate .getCurrentSession和OpenSession 采用getCurrentSession()创建的Session会绑定到当前的线程中去.而采用Op ...

  5. Hibernate的openSession和getCurrentSession区别

    原文链接:http://blog.csdn.net/xiao__gui/article/details/7695698 很多资料从理论上解释hibernate的openSession和getCurre ...

  6. OpenSession与getCurrentSession的区别

    getCurrentSession 使用当前的Session OpenSession  创建一个行的Session 1.getCurrentSession创建的Session会更当前线程绑定,而Ope ...

  7. getCurrentSession()与openSession()的区别?

    1.getCurrentSession()与openSession()的区别? 采用getCurrentSession()创建的session会绑定到当前线程中,而采用openSession(),创建 ...

  8. hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别

    1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...

  9. Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析--csdn 曹胜欢...

    新接触一个框架的目的就是想利用这个框架来为我们做一些工作,或者是让他来简化我们的工作,利用这个框架无非就是要利用这个框架所给我们提供的API去操作我们的数据,所以利用一个框架的好坏很大一部分取决于你对 ...

最新文章

  1. mysql 定义class_MySQL数据库类的定义
  2. Caching Best Practices--reference
  3. 关于ASP.NET动态加载Master页面
  4. OpenCV4Android JavaCameraView实现
  5. 大剑无锋之Zookeeper面试题
  6. 计算找到出现最多的数字和次数 ,实现数组去重 ,进行排序。
  7. javaweb(09) EL表达式JSTL标签库(jsp相关,了解)
  8. 聚类性能度量指标及距离计算
  9. Winfrom 线程实现 http、https 文件下载 显示下载进度详情
  10. Ubuntu系统安装VMware Tools的简单方法
  11. Hibernate配置文件,映射文件
  12. 一阶惯性环节的性能分析——自动控制原理基础补充(二)
  13. 最大子段和三种算法实现
  14. java生成pdf旋转_Java 设置PDF页面大小/旋转、纸张方向、页边距
  15. Retrofit(Okhttp)Dns解析服务器域名异常时尝试使用服务器IP访问
  16. (无技术)我的网站开发之路及部分服务器商优缺点
  17. 嵌入式编程与软件编程思想不同浅见
  18. 『毒舌吐槽社区』-很多敏感内容,你懂的!
  19. 将一个excel多个文件合并成一个文件的多个sheet
  20. Xilinx 7系列FPGA概览

热门文章

  1. cheatengine找不到数值_浙江工程勘察资质找谁代办(圆你资质梦)
  2. slurm安装配置_安装Slurm_鲲鹏高性能计算解决方案_安装指南_Slurm 18.08.7 安装指南_Slurm的安装配置_华为云...
  3. 2021福州地区高考成绩排名查询,2021年福州各高中高考成绩排名及放榜最新消息...
  4. Java开发中遇到具有挑战的事_170道Java工程师面试题,你敢挑战吗?
  5. java单例默认_Spring bean为什么默认是单例
  6. 电大计算机基础知识机考题,电大《计算机应用基础》网考机考单选题大汇总
  7. IIRFilterNode
  8. Requests Response
  9. jQuery 事件方法(交互)
  10. C语言输出百分号%的方法和示例