事务的编写规范与Hibernate绑定session
一、事务的编写规范
1、事务的基本概念:
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性
单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使
应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的一个逻辑工作单
位,由DBMS中的事务管理子系统负责事务的处理。
5、事务的规范代码结构
try {
//开启事物
//操作数据
//提交事物
} catch (Exception e) {
// 事务回滚
}finally{
//释放资源
}
6、规范代码示例
@Test
public void test8(){ SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
//开启事物
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//操作数据
UserEntity user1 = session.get(UserEntity.class, 2);
System.out.println(user1);
//提交事物
tx.commit();
} catch (Exception e) {
// 事务回滚
tx.rollback();
}finally{
//释放资源
session.close();
sessionFactory.close();
}
}
二、Hibernate绑定session
1、session类似于JDBC中的Connection连接。
2、绑定session,底层是使用threadLoacl.
3、绑定原因:session是单线程的,一个session只能被一个线程使用,绑定后可以防止一个session被多个线程使用,出现异常。
4、绑定步骤:
(1)在核心配置文件中进行配置(必须要配置)
<!-- 在hibernate核心配置文件中配置 -->
<property name="hibernate.current_session_context_class">thread</property>
(2)编写代码:
@Test
public void test9(){
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.getCurrentSession();
tx = session.beginTransaction();
UserEntity user1 = session.get(UserEntity.class, 2);
System.out.println(user1);
tx.commit();
} catch (Exception e) {
tx.rollback();
}finally{
sessionFactory.close();
}
}
5、使用该绑定线程在结束后不需要手动关闭该session,该session会随着线程的结束而自动关闭。
验证自动关闭
代码:
@Test
public void test10(){
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.getCurrentSession();
tx = session.beginTransaction();
UserEntity user1 = session.get(UserEntity.class, 2);
System.out.println(user1);
tx.commit();
} catch (Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}
结果:测试出现异常,提示该session已经被关闭。

事务的编写规范与Hibernate绑定session的更多相关文章
- hibernate绑定session
session session是一种单实例对象 简单说就是自己用 别人不能用.在一些项目中很多人一起来操作 所以我们可以把session与我们的本地线程一起绑定,本地线程的特点就是执行一次 从创建到销 ...
- Hibernate绑定session保证session为单线程操作
- Hibernate中Session与本地线程绑定
------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session ...
- Hibernate Open Session In View模式【转】
来源:http://www.yybean.com/opensessioninviewfilter-role-and-configuration 一.作用 Spring为我们解决Hibernate的Se ...
- Spring对Hibernate的session生效期(事物提交管理)介绍
在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,这样做的原因是因为Hibernate默认的事务自动提交是false,它是需要人为的手动 ...
- hibernate中session的获取使用以及其他注意事项
hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行 ...
- Hibernate管理Session和批量操作
Hibernate管理Session Hibernate自身提供了三种管理Session对象的方法 Session对象的生命周期与本地线程绑定 Session对象的生命周期与JTA事务绑定 Hiber ...
- hibernate中session
hibernate中的session是一级缓存,可以理解为进程级的缓存.在进程运行期间一直存在. session可以理解为一个可以操作数据库的对象 具体如何操作数据库? session中有方法, 如果 ...
- hibernate 管理 Session(单独使用session,不spring)
Hibernate 本身提供了三个管理 Session 对象的方法 Session 对象的生命周期与本地线程绑定 Session 对象的生命周期与 JTA 事务绑定 Hibernate 托付程序管理 ...
随机推荐
- Linux常用开发指令
gcc mysqltest.c -o mysqltest `mysql_config –cflags –libs`
- C++ 控制台编程
播放媒体文件 #include<windows.h> #program <mmsystem.h> #pragma comment(lib,"winmm.lib&quo ...
- Mayor's posters 线段树区间覆盖
题目链接 http://poj.org/problem?id=2528 Description The citizens of Bytetown, AB, could not stand that t ...
- HTTP响应状态码参考
HTTP响应状态码参考: 1xx:信息 Continue 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求. Switching Protocols 服务器转换协议 ...
- 在macbookpro上开启ssh服务
- c++11 enable_shared_from_this
本质的原因:raw data和引用计数的管理块,可能是分开的 使用场景: 需要在对象中得到shared ptr, 错误的代码:直接构造新的shared_ptr<A>对象,两个shared ...
- Git远程库
要关联一个远程主机,使用命令 git remote add origin <url> : 删除远程主机,使用命令 git remote rm origin ; git push 的一般形式 ...
- IIS服务器环境下某路径下所有PHP接口无法运行报500.19错误
IIS服务器环境下某路径(文件夹)下所有PHP接口无法运行报500.19错误 环境:IIS8.5 + php7.2.1 错误描述:某目录下(如 d:\web\A)所有php接口文档运行错误,接口测试工 ...
- Regini命令的使用和参数讲解
Regini程序操作系统自带的,从XP开始就有,主要是用于修改注册表及注册表权限.我们就从这两方面介绍regini的用法.Regini必须要指定操作脚本,也就是,提前将你要操作的内容写在一个文本文件中 ...
- Python中的range和xrange区别
range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列. range示例: >>> r ...