本节主要内容:

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. CentOS 7 配置 mariadb

    一.安装mariadb :  yum groupinstall  mariadb  mariadb-client -y 二.启动(设置开机启动)服务 : systemctl  start (enabl ...

  2. 使用DOS指修改文件名

    需求:将文件名中的特殊字符#和~去掉 文件夹路径如下: 开始->运行->在对话框中输入字母“cmd”,进入dos模式 输入命令行“cd c:\test”然后回车,再输入命令行“dir /b ...

  3. js开发:数组的push()、pop()、shift()和unshift()(转)

    js开发:数组的push().pop().shift()和unshift() 2017-05-18 11:49 1534人阅读 评论(0) 收藏 举报  分类: javascript开发(22)  版 ...

  4. 关于login/interactive/no-interactive shell和profile/bash_profile/bashrc

    login shell:第一次登录进系统时的shell,一般是指本机启动时的控制台shell或者ssh远程登录时的shell. interactive shell:登录以后,再打开控制台时运行的she ...

  5. Entity Framework Code-First(9.1):DataAnnotations - Key Attribute

    DataAnnotations - Key Attribute: Key attribute can be applied to properties of a class. Default Code ...

  6. UT源码116

    2)NextDate函数问题 NextDate函数说明一种复杂的关系,即输入变量之间逻辑关系的复杂性 NextDate函数包含三个变量month.day和year,函数的输出为输入日期后一天的日期. ...

  7. Eclipse超级有用的快捷键

    1.Alt + Shift + R 重构 2.Ctrl + F11 运行并调试程序 3.Ctrl + Shift + O 自动导入包 4.Ctrl + Shift + F 格式化代码 5.F5 调试模 ...

  8. c#桌面应用程序--窗体重复创建问题

    重复创建窗体问题的引出 连续单击添加窗体按钮,通过普通的在按钮事件方法中创建窗体,显示窗体的后果是,我们会发现,相同的窗体会重复不断的弹出.代码如下: //添加窗口事件方法 private void ...

  9. 第三章 Goroutine调度策略(16)

    本文是<Go语言调度器源代码情景分析>系列的第16篇,也是第三章<Goroutine调度策略>的第1小节. 在调度器概述一节我们提到过,所谓的goroutine调度,是指程序代 ...

  10. linker 错误解决办法 地图