hibernate课程 初探单表映射2-6 session详解(下)
本节主要内容:
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详解(下)的更多相关文章
- hibernate课程 初探单表映射4-1 课程总结
ORM是一种面向对象编程的方法,用这种方法来避免写数据库底层语言sql语句,这样有利于java的跨平台,扩展.维护.而hirenate是ORM的一种框架 hirbernate开发基本步骤编写配置文档h ...
- hibernate课程 初探单表映射3-1 hibernate单表操作简介
本章简介: 1 单一主键 2 基本类型 3 对象类型 4 组件属性 5 单表操作CRUD实例
- hibernate课程 初探单表映射2-1 hibernate进阶 本章简介
本章简介,主要讲5大块的内容 1 hibernate.cfg.xml的配置 2 session 的简介 3 transaction的简介 4 session的详解 5 对象关系映射常用配置
- hibernate课程 初探单表映射1-9 创建关系映射文件
创建关系映射文件:(把实体类映射成一个表) 1 右键src==>new==>other==>hibernate==>hbm.xml==>Student==>Fini ...
- hibernate课程 初探单表映射3-3 对象类型
本节简介: 1 简介对象类型(重点是音视频blob类型) 2 demo(对图片的写入数据库与读取) 1 简介对象类型 映射类型 java类型 标准sql类型 mysql类型 oracle类型 bina ...
- hibernate课程 初探单表映射2-7 hbm配置文件常用设置
本节主要简介hbm配置文件以下内容: 1 mapping标签 2 class标签 3 id标签 1 hibbernate-mapping标签 schema 模式名称 catalog 目录名称 defa ...
- hibernate课程 初探单表映射2-4 transaction简介
1 hibernate是非自动提交.如果transaction不写的话,会只创建表结构而不插入语句. 如果不写transaction而想实现插入的功能的话,需要重写session的dowork方法 ...
- hibernate课程 初探单表映射2-2 hibernate常用配置
1 hibernate.cfg.xml常用配置: show_sql 控制台打印sql format_sql 控制台将sql排版 hbm2ddl.auto: create 删除表结构,重新建表并插值 u ...
- hibernate课程 初探单表映射1-11 通过hibernate API访问编写第一个小例子
hibernate 业务流程 1 创建配置对象 Configuration config = new Configuration().configure(); 2 创建服务注册对象 Service ...
- hibernate课程 初探单表映射1-5 hibernate第一个demo
hibernate 开发步骤:(hibernate4.2+mysql6.0) 1 hibernate配置文件(hibernate.cfg.xml) 2 持久化类 3 对象-关系映射文件 4 hiber ...
随机推荐
- java处理中日文字符串的乱码问题
——杂言:前段时间在处理音频预览问题,详见关于audiojs的研究.期间,将远端的音频下载并缓存在本地过程中,涉及到java.io.*的几个操作,发生一些乱码问题. 我以前的处理是将本地的编码转换为U ...
- N72烧写
1.打开MFGTOOL.exe烧写工具:上电之前,先短接左下脚,当查看到MFGTOOL工具扫描到工具之后,点击开始,过2分钟左右烧写完成:完成之后电源要拔插以下!! 2.利用---生产工具V1.3 2 ...
- linux命令-stty
一.用途: stty——改变和打印终端行设置 二.参数: 1.打印终端行设置 -a,--all 以人可读的方式打印所有当前设置:-a参数比单独的stty命令输出的终端信息更详细 -g,--save ...
- 阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint1-基于Epoll架构的采集端程序框架设计\第2课-基于Epoll的采集端程序框架设计
回顾之前的整个程序架构 把epoll机制应用到这个架构上去 下面主要去分析我们的系统中有没有需要等待的事件,先看看采集子系统 在采集子系统当中,摄像头有数据,摄像头采集到图像数据可以作为一个等待事件. ...
- SQL 动态拼接SQL 语句
USE [PMS_UnifiedDB_15] GO /****** Object: StoredProcedure [dbo].[SP_GetLogInfo] Script Date: 2/11/20 ...
- C语言函数调用的底层机制
由这个文章引入吧(百度文库:http://wenku.baidu.com/link?url=aAm1tBg4okqIyFAmfgrJBHdPDrri5LUEKrJjn-dNITds5lwSm550DT ...
- java多线程系列:ThreadPoolExecutor
ThreadPoolExecutor自定义线程池 开篇一张图(图片来自阿里巴巴Java开发手册(详尽版)),后面全靠编 好了要开始编了,从图片中就可以看到这篇博文的主题了,ThreadPoolExec ...
- rxjs入门6之合并数据流
一 concat,merge,zip,combineLatest等合并类操作符 以上操作符在版本6中已经只存在静态方法,不能在pipe中使用. import {concat,merge,zip,com ...
- SCUT - 354 - CC的简单多项式 - 杜教筛
https://scut.online/p/354 跟多项式一点关系都没有. 注意到其实两个多项式在1处求值,那么就是他们的系数加起来. 列一列发现系数就是n以内两两求gcd的值,还自动把0去掉了. ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)
5. <fieldType> fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值.e.g. <fieldTyp ...