hibernate中的session介绍

本文详细解析了Hibernate Session的获取、使用及事务管理过程,包括配置文件读取、Session创建、CRUD操作执行、事物提交与关闭等关键步骤。重点介绍了如何在Session基础上执行操作并注意开启与关闭事物的重要性,以及事务的自动提交设置方法。

​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.youkuaiyun.com/dyy_gusi/article/details/46414657

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值