- hibernate事务操作
- 事务相关概念
(1)什么是事务:在数据库操作中,一项事务(Transaction) 是由一条或多条操作数据库的SQL语句组成的一个不可分割的工作单元。当事务中的所有操作都正常完成时,整个事务才能被提交到数据库中,如果有一项操作没有完成,则整个事务会被回滚。其实事务总结起来理解为:逻辑上的一组操作,组成这组操作的各个单元,要么一起成功,要么一起失败。
(2)事务的特性:四个特性:原子性、一致性、隔离性、持久性
(3)不考虑隔离性产生问题:脏读、不可重复读、虚读
(4)设置事务隔离级别
——mysql默认隔离级别:repeatable_read
- hibernate事务代码规范写法
(1)代码结构
try { 开启事务; 提交事务;
}catch() { 回滚事务
}finally{ 关闭
}
// 事务规范代码
@Test
public void testTx() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
// 开启事务
tx = session.beginTransaction();
// 添加
User user = new User();
user.setUid(7);
user.setUsername("daf");
user.setPassword("123");
user.setAddress("XXX");
// 保存
session.save(user);
// 搞个异常
int i = 10 / 0;
// 提交事务
tx.commit();
} catch (Exception e) {
// 回滚事务
tx.rollback();
} finally {
// 关闭操作
session.close();
sessionFactory.close();
}
}
- hibernate绑定session
session是单线程,在开发中,项目的是很多人一起要操作的,让session与本地线程绑定,那么session就是唯一的对象。
(1)session类似于jdbc的connection,之前web阶段学过threadLocal
(2)帮实现与本地线程绑定的session
(3)获取与本地线程绑定的session
——在hibernate核心配置文件中配置
——调用sessionFactory里面的方法得到
——获取与本地线程绑定的session的时候,关闭session报错,不需要我们再手动关闭了。
待续。