本节主要内容:

1    介绍了getCurrentSession和opensession的区别

2    demo:通过打印比较两个session是否相同,验证两个session是否是同一session

3    demo:通过打印hashcode验证不关闭session,容易连接池溢出。

1    getCurrentSession和opensession的区别

a  getCurrentSession每次获取的都是同一连接,opensession每次获取的是不同的连接。

b  getCurrentSession不需要手动关闭,在提交事务之后自动关闭。opensession需要手动关闭,如果不关闭的话,连接数枯竭,容易连接池溢出.

c  getCurrentSession 必须开启事务transaction,opensession不是必须(自我总结的)

2   demo1

package hibernate_001;

import java.sql.Array; import java.sql.Blob; import java.sql.CallableStatement; import java.sql.Clob; import java.sql.DatabaseMetaData; import java.sql.NClob; import java.sql.PreparedStatement; import java.sql.SQLClientInfoException; import java.sql.SQLException; import java.sql.SQLWarning; import java.sql.SQLXML; import java.sql.Savepoint; import java.sql.Statement; import java.sql.Struct; import java.util.Date; import java.util.Map; import java.util.Properties; import java.util.TimeZone; import java.util.concurrent.Executor;

import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.jdbc.Work; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test;

import com.ddwei.student.Student; import com.mysql.jdbc.Connection; import com.mysql.jdbc.ExceptionInterceptor; import com.mysql.jdbc.Extension; import com.mysql.jdbc.MySQLConnection; import com.mysql.jdbc.log.Log;

public class StudentTest {    private SessionFactory sessionFactory;  private Session session;  private Transaction trasaction;    @Test  public void testSaveStudent(){   //获取配置对象,得到hibernate.cfg.xml配置的内容   Configuration config = new Configuration().configure();   //获取服务注册对象,获取hibernate.hbm.xml配置的内容   ServiceRegistry sry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();      SessionFactory sfy = config.buildSessionFactory(sry);   Session sesion1 = sfy.openSession();   Session sesion2 = sfy.openSession();      System.out.println(sesion1==sesion2);       //  Student student =new Student(3,"周恩来","男",new Date(),"绍兴");//创建学生对象 //  session.save(student);//会话保存学生对象进入数据库  }        @Test  public void testSaveStudent2(){   //获取配置对象,得到hibernate.cfg.xml配置的内容   Configuration config = new Configuration().configure();   //获取服务注册对象,获取hibernate.hbm.xml配置的内容   ServiceRegistry sry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();      SessionFactory sfy = config.buildSessionFactory(sry);   Session sesion1 = sfy.getCurrentSession();   Session sesion2 = sfy.getCurrentSession();      System.out.println(sesion1==sesion2);       //  Student student =new Student(3,"周恩来","男",new Date(),"绍兴");//创建学生对象 //  session.save(student);//会话保存学生对象进入数据库  }

}

demo2

package hibernate_001;

import java.sql.Array; import java.sql.Blob; import java.sql.CallableStatement; import java.sql.Clob; import java.sql.DatabaseMetaData; import java.sql.NClob; import java.sql.PreparedStatement; import java.sql.SQLClientInfoException; import java.sql.SQLException; import java.sql.SQLWarning; import java.sql.SQLXML; import java.sql.Savepoint; import java.sql.Statement; import java.sql.Struct; import java.util.Date; import java.util.Map; import java.util.Properties; import java.util.TimeZone; import java.util.concurrent.Executor;

import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.jdbc.Work; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test;

import com.ddwei.student.Student; import com.mysql.jdbc.Connection; import com.mysql.jdbc.ExceptionInterceptor; import com.mysql.jdbc.Extension; import com.mysql.jdbc.MySQLConnection; import com.mysql.jdbc.log.Log;

public class StudentTest2 {    private SessionFactory sessionFactory;  private Session session;  private Transaction trasaction;    @Test  public void testSaveStudent(){   //获取配置对象,得到hibernate.cfg.xml配置的内容   Configuration config = new Configuration().configure();   //获取服务注册对象,获取hibernate.hbm.xml配置的内容   ServiceRegistry sry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();      SessionFactory sfy = config.buildSessionFactory(sry);      Session sesion1 = sfy.openSession();      sesion1.doWork(new Work() {        @Override    public void execute(java.sql.Connection connection) throws SQLException {     // TODO Auto-generated method stub     System.out.println("connection.hashcode is "+connection.hashCode());    }   });      Student student =new Student(4,"周恩来","男",new Date(),"绍兴");//创建学生对象   sesion1.save(student);//会话保存学生对象进入数据库

Session sesion2 = sfy.openSession();   Student student2 =new Student(5,"周恩来","男",new Date(),"绍兴");//创建学生对象   sesion2.doWork(new Work() {        @Override    public void execute(java.sql.Connection connection) throws SQLException {     // TODO Auto-generated method stub     System.out.println("connection.hashcode is "+connection.hashCode());    }   });      sesion2.save(student2);//会话保存学生对象进入数据库

}        @Test  public void testSaveStudent2(){   //获取配置对象,得到hibernate.cfg.xml配置的内容   Configuration config = new Configuration().configure();   //获取服务注册对象,获取hibernate.hbm.xml配置的内容   ServiceRegistry sry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();      SessionFactory sfy = config.buildSessionFactory(sry);   Session sesion1 = sfy.getCurrentSession();   Transaction tran = sesion1.beginTransaction();   Student student =new Student(1,"周恩来","男",new Date(),"绍兴");//创建学生对象   sesion1.doWork(new Work(){    @Override    public void execute(java.sql.Connection connection) throws SQLException {     // TODO Auto-generated method stub     System.out.println("connection.hashcode is "+connection.hashCode());    }   });   sesion1.save(student);//会话保存学生对象进入数据库   tran.commit();         Session sesion2 = sfy.getCurrentSession();   Transaction tran2 = sesion2.beginTransaction();

Student student2 =new Student(2,"周恩来","男",new Date(),"绍兴");//创建学生对象   sesion2.doWork(new Work() {        @Override    public void execute(java.sql.Connection connection) throws SQLException {     // TODO Auto-generated method stub     System.out.println("connection.hashcode is "+connection.hashCode());    }   });   sesion2.save(student2);//会话保存学生对象进入数据库   tran2.commit();     }

}

hibernate课程 初探单表映射2-6 session详解(下)的更多相关文章

  1. hibernate课程 初探单表映射4-1 课程总结

    ORM是一种面向对象编程的方法,用这种方法来避免写数据库底层语言sql语句,这样有利于java的跨平台,扩展.维护.而hirenate是ORM的一种框架 hirbernate开发基本步骤编写配置文档h ...

  2. hibernate课程 初探单表映射3-1 hibernate单表操作简介

    本章简介: 1 单一主键 2 基本类型 3 对象类型 4 组件属性 5 单表操作CRUD实例

  3. hibernate课程 初探单表映射2-1 hibernate进阶 本章简介

    本章简介,主要讲5大块的内容 1 hibernate.cfg.xml的配置 2 session 的简介 3 transaction的简介 4 session的详解 5 对象关系映射常用配置

  4. hibernate课程 初探单表映射1-9 创建关系映射文件

    创建关系映射文件:(把实体类映射成一个表) 1 右键src==>new==>other==>hibernate==>hbm.xml==>Student==>Fini ...

  5. hibernate课程 初探单表映射3-3 对象类型

    本节简介: 1 简介对象类型(重点是音视频blob类型) 2 demo(对图片的写入数据库与读取) 1 简介对象类型 映射类型 java类型 标准sql类型 mysql类型 oracle类型 bina ...

  6. hibernate课程 初探单表映射2-7 hbm配置文件常用设置

    本节主要简介hbm配置文件以下内容: 1 mapping标签 2 class标签 3 id标签 1 hibbernate-mapping标签 schema 模式名称 catalog 目录名称 defa ...

  7. hibernate课程 初探单表映射2-4 transaction简介

    1 hibernate是非自动提交.如果transaction不写的话,会只创建表结构而不插入语句.   如果不写transaction而想实现插入的功能的话,需要重写session的dowork方法 ...

  8. hibernate课程 初探单表映射2-2 hibernate常用配置

    1 hibernate.cfg.xml常用配置: show_sql 控制台打印sql format_sql 控制台将sql排版 hbm2ddl.auto: create 删除表结构,重新建表并插值 u ...

  9. hibernate课程 初探单表映射1-11 通过hibernate API访问编写第一个小例子

    hibernate 业务流程 1 创建配置对象 Configuration config  = new  Configuration().configure(); 2 创建服务注册对象 Service ...

  10. hibernate课程 初探单表映射1-5 hibernate第一个demo

    hibernate 开发步骤:(hibernate4.2+mysql6.0) 1 hibernate配置文件(hibernate.cfg.xml) 2 持久化类 3 对象-关系映射文件 4 hiber ...

随机推荐

  1. Impala介绍

    Impala介绍 Impala支持的文件格式 Impala可以对Hadoop中大多数格式的文件进行查询.它能通过create table和insert的方式将一部分格式的数据加载到table中,但值得 ...

  2. miRNA

    MicroRNA (miRNA)  是一类内生的.长度约为20-24个核苷酸的小 RNA,其在细胞内具有多种重要的调节作用.每个 miRNA 可以有多个靶基因的表达,而几个 miRNA 也可以调节同一 ...

  3. JS中双击和单击事件冲突解决

    在JS中代码中同一功能块中通常同时会用到单击.双击事件,但通常会遇到一个问题,就是在双击的时候即执行了一次双击事件,而且还执行了两次单击事件.此类冲突在ZTree.DHTMLX中经常遇到. 想要解决两 ...

  4. 11.Weblogic-SSRF漏洞复现

    应为这一阵正好在学习SSRF漏洞,又苦于本人太菜没有挖到SSRF,只能复现... 先贴出很早之前央视网SSRF可窥探内网(Weblogic SSRF案例):https://www.secpulse.c ...

  5. HDU 3915 Game (高斯消元)

    题意:有n堆石子,每个人只能从某一堆至少拿走一个,不能拿者败.问事先拿走某些堆的石子,使得先手必败. 析:将石子拆成二进制,未知数为1表示保留该堆石子,为0表示事先拿走该堆石子.最后求自由变元的数目, ...

  6. hello markdown

    目录 标题 标题1 标题2 标题3 有序列表 无序列表 插入图片 插入链接 粗体.斜体.删除线 引用 表格 代码 目录 新的开始 希望能够坚持下去 cnblogs也支持markdown 之前看了写ma ...

  7. cookie 单值设置

  8. 使用 typescript ,提升 vue 项目的开发体验(2)

    此文已由作者张汉锐授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. vuex-class 提供了和 vuex 相关的全部装饰器,从而解决了上面 Vue.extend + vue ...

  9. SCUT - 321 - Tobby's magic - 线段树

    https://scut.online/p/321 第一次做区间线段树. 感觉和单点的一样啊.pushdown的时候要注意一些问题,st的值有可能是跟区间长度有关的. #include<bits ...

  10. 清北刷题冲刺 10-30 p.m

    少女 #include<iostream> #include<cstdio> #include<queue> #include<cstdlib> #de ...