hibernate中的session介绍

来源:互联网 发布:无线信道检测软件 编辑:程序博客网 时间:2024/05/16 23:59

​session直白​点说就是代表一次会话,这次会话中,我们可以执行各种我们需要的操作。比如插入数据,更新数据等等。同时我们所有的对数据库所有的操作都是在session的支持下进行,所以session很重要,接来下就单独介绍下hibernate的的session.

一、hibernate执行的过程:
->读取配置文件(hibernate.cfg.xml)创建Configuration对象
->读取对象映射文件(xxx.hbm.xml或者@Entity对象)创建SessionFactory对象
->通过SessionFactory创建Session对象
->开启事物
->在session的基础上执行CRUD操作
->提交事物
->关闭session,结束执行
但是需要注意的是在session基础上执行操作前后分别需要开启事物和关闭事物。创建和销毁都是比较消耗资源,所以一个数据库通常只创建一个sessionFactory供使用。session其实就相当于JDBC中的Connection对象。

二、hibernate中的transaction
​上面提到的事物就是transaction,hibernate对数据库中数据的操作都是封装在transaction中的,而且transaction默认是非自动提交的,所以如果我们对数据库进行各种操作,但是如果没有提交事务,然而所有的操作并没有作用。
​当然我们也可以设置事物为自动提交,方式是调运session的doWork方法,然后获得Connection之后在设置成自动提交。

session.doWork(new Work() {    public void execute(Connection connection) throws SQLException {        connection.setAutoCommit(true);    }});

三、session详解
1、session的获取
​我们有两种方式可以获取hibernate中的session,一种是通过SessionFactory的getCurrentSession()方法,另一种是SessionFactory的openSession()方法。两种方式都可以获得session,但是如果使用getCurrentSession()的方式,需要在配置文件(hibernate.cfg.xml)中配置自动管理session的属性:<property name="current_session_context_class">thread</property>;而如果使用openSession()则无需配置该属性。
2、getCurrentSession和openSession的区别
​openSession是每次直接打开一个新的session,而且session不会自动关闭,需要手动关闭session,如果不手动关闭,后果可能是连接溢出。
​getCurrentSession是自动管理session,每次获取并不都是打开一个新的session,而是使用的是单例模式,而且如果在事物回滚或者提交以后,session通常会自动关闭。
​session和hibernate对象的三种状态息息相关,关于hibernate的三种状态,可以看一下这篇文章:http://blog.csdn.net/dyy_gusi/article/details/46414657​

2 0