SSH与SSM学习之hibernate12——hibernate中的事务
来源:互联网 发布:2016年实体店倒闭数据 编辑:程序博客网 时间:2024/06/03 17:12
- SSH与SSM学习之hibernate12hibernate中的事务
- 一事务
- 1 事务特性
- 2 事务并发问题
- 3 事务隔离级别
- 二如何在hibernate中指定数据库的隔离级别
- 三在项目中如何管理事务
- 1 管理事务说明
- 2 getCurrentSession 使用说明
- 四service和dao实例
- 1 CustomerDaoImpl
- 2 CustomerServiceImpl
- 一事务
SSH与SSM学习之hibernate12——hibernate中的事务
一、事务
1.1 事务特性
原子性
一致性
隔离性
持久性
1.2 事务并发问题
脏读
不可重复度
幻|虚读
1.3 事务隔离级别
读未提交(脏读、不可重复度、幻|虚读)
读已提交(不可重复度、幻|虚读)
可重复读(mysql默认级别)(幻|虚读)
串行化 - 没有问题
二、如何在hibernate中指定数据库的隔离级别
配置事务的隔离级别,需要在hibernate的主配置文件hibernate.cfg.xml中添加如下的配置
<!-- 指定hibernate操作数据库时的隔离级别 #hibernate.connection.isolation 1|2|4|8 0001 1 读未提交 0010 2 读已提交 0100 4 可重复读 1000 8 串行化--><property name="hibernate.connection.isolation">4</property>
三、在项目中如何管理事务
3.1 管理事务说明
业务开始之前打开事务,业务执行之后提交事务. 执行过程中出现异常.回滚事务.
在dao层操作数据库需要用到session对象.在service控制事务也是使用session对象完成. 我们要确保dao层和service层使用的使用同一个session对象
在hibernate中,确保使用同一个session的问题,hibernate已经帮我们解决了. 我们开发人员只需要调用sf.getCurrentSession()方法即可获得与当前线程绑定的session对象
3.2 getCurrentSession() 使用说明
- 调用getCurrentSession方法必须配合主配置中的一段配置
<!--指定session与当前线程绑定--><property name="hibernate.current_session_context_class">thread</property>
- 通过getCurrentSession方法获得的session对象.当事务提交时,session会自动关闭.不要手动调用close关闭.
四、service和dao实例
4.1 CustomerDaoImpl
package com.qwm.hcrm.dao.impl;import com.qwm.hcrm.dao.CustomerDao;import com.qwm.hcrm.dmain.Customer;import com.qwm.hcrm.utils.HibernateUtils;import org.hibernate.Session;import org.hibernate.Transaction;/** * @author:qiwenming * @date:2017/9/17 0017 0:58 * @description: */public class CustomerDaoImpl implements CustomerDao{ @Override public void save(Customer customer) { //1.获取session Session session = HibernateUtils.getCurrentSession(); //2.保存对象 session.save(customer); }}
4.2 CustomerServiceImpl
package com.qwm.hcrm.service.impl;import com.qwm.hcrm.dao.CustomerDao;import com.qwm.hcrm.dao.impl.CustomerDaoImpl;import com.qwm.hcrm.dmain.Customer;import com.qwm.hcrm.service.CustomerService;import com.qwm.hcrm.utils.HibernateUtils;import org.hibernate.Session;import org.hibernate.Transaction;/** * @author:qiwenming * @date:2017/9/17 0017 1:02 * @description: */public class CustomerServiceImpl implements CustomerService{ private CustomerDao customerDao = new CustomerDaoImpl(); @Override public void save(Customer customer) { Session session = HibernateUtils.getCurrentSession(); //打开事务 Transaction t = session.beginTransaction(); try { customerDao.save(customer); }catch (Exception e){ e.printStackTrace(); t.rollback(); } //提交事务 t.commit(); }}
阅读全文
0 0
- SSH与SSM学习之hibernate12——hibernate中的事务
- SSH与SSM学习之hibernate08——hibernate中的实体规则
- SSH与SSM学习之Spring19——Spring事务之事务基础
- SSH与SSM学习之Spring22——Spring事务之xml配置方式管理事务
- SSH与SSM学习之Spring23——Spring事务之注解配置方式管理事务
- SSH与SSM学习之SSH整合09——Spring的aop事务
- SSH与SSM学习之SSH整合06——Hibernate与Spring整合
- SSH与SSM学习之Spring20——Spring事务之Spring相关的基础
- SSH与SSM学习之SSH整合05——单独配置Hibernate
- SSH与SSM学习之SSH整合08——Spring整合Hibernate环境操作数据库
- SSH与SSM学习之Spring21——Spring事务之代码方式管理事务(基本不用)
- SSH与SSM学习之hibernate10——Hibernate的一级缓存
- SSH与SSM学习之hibernate11——hibernate的二级缓存
- SSH与SSM学习之Spring11——Spring中的AOP
- SSH与SSM学习之hibernate04——Configuration
- SSH与SSM学习之hibernate05——SessionFactory
- SSH与SSM学习之hibernate06——Session
- SSH与SSM学习之hibernate07——Transaction
- python 访问字典
- Win7 搭建MySQL集群
- Leetcode练习 #4Median of Two Sorted Arrays
- tcp 和 udp 的区别 ,及 udp 实现可靠传输
- Java Map entrySet方法
- SSH与SSM学习之hibernate12——hibernate中的事务
- String优势与StringBuffer,StringBuider优势,还有存于不同区域存在的性能差别
- Java多线程编程
- SecureCRT链接失败
- coocs项目的创建
- Map list set 比较
- 服务器开发---开发环境配置
- MySQL第一天初识--对数据库和表的增删改查
- 解决Selenium2Library 导入报错问题