8.Spring整合Hibernate_2_声明式的事务管理(Annotation的方式)
声明式的事务管理(AOP的主要用途之一) (Annotation的方式)
1.加入annotation.xsd
2.加入txManager bean
3.<tx:annotation-driven
1 <tx:annotation-driven transaction-manager="txManager"/> 2 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 3 <property name="sessionFactory" ref="sessionFactory"/> 4 </bean>
4.在需要的事务的方法上加 : @Transactional
@Transactional
1.被注解的方法只有在抛出 运行时异常才会触发rollback,非运行时异常不会rollback
2.不管什么异常,只要你catch了,spring就会放弃管理
3.事务的传播特性 propagation_required
例如:@Transactional(propagation = Propagation.REQUIRED) 等同于(@Transactional)
作用:一个方法声明了@Transactional事务后,其内再调用方法不需要再声明@Transactional
4.read_only
例如:@Transactional(propagation = Propagation.REQUIRED,readOnly=true)
当方法声明为 readOnly = true 时,该方法及其调用的方法内都不执行 insert update等
1 //使用 @Transactional 注解 ,声明 需要进行事务管理的方法 2 //事务管理,同样体现了 AOP ,即在方法的执行前后,加上事务开启 和 事务关闭语句,如果发现了 运行时异常,就会rollback 3 //为什么在这里事务管理要放到 Service层,不放到DAO层:1.因为该add方法牵扯到了多个DAO,里面有setMsg方法 和 save方法,要保证这两个方法 ‘荣辱与共’ 4 //所以 service 的 add 方法需要 进行事务管理, 5 //如果 add 方法中,只用到了一个DAO,那么只需要在 该 DAO 需要 进行事务管理的方法上进行 管理即可 6 7 //事务的传播特性: 8 //@Transactional(propagation=Propagation.REQUIRED) == (@Transactional) 9 //一个方法声明了 @Transactional 事务后,其内再调用的方法不需要再声明 @Transactional 10 //别人调 add 方法,如果这个add方法之前 ,如果说已经有了一个 transaction,就用原来那个,如果没有(在UserService中没有事务),就创建一个新的(即需要(required)的时候才创建) 11 12 //read_only 13 //当方法声明 readOnly=true时,就产生一个 只读 的 connection ,当方法内部只有读取的业务时,可以使用,提高性能 14 15 @Transactional(propagation=Propagation.REQUIRED,readOnly=true) 16 public void add(User user) { 17 Log log = new Log(); 18 log.setMsg("logmsg"); 19 logDAO.saveMsg(log); 20 userDAO.save(user); 21 }
5.需要注意,使用事务后,Hibernate 获得 session时要使用getCurrentSession,不能使用openSession
为什么?:使用事务后,不能使用openSession,否则可能会创建一个新的session,无法保证和后面的方法是在同一个事务中
1 @Component("userDAO") 2 public class UserDAOImpl implements UserDAO{ 3 private SessionFactory sessionFactory; 4 5 public SessionFactory getSessionFactory() { 6 return sessionFactory; 7 } 8 9 //在DAO中 注入 setSessionFactory 10 @Resource 11 public void setSessionFactory(SessionFactory sessionFactory) { 12 this.sessionFactory = sessionFactory; 13 } 14 15 @Override 16 public void save(User user) { 17 //注:使用事务后,不能使用 openSession,否则会 创建一个 新的session,无法保证和后面的方法是在同一事务中 18 19 Session session = sessionFactory.getCurrentSession(); 20 session.save(user); 21 System.out.println(sessionFactory.getClass()); 22 System.out.println("a user saved"); 23 24 //1.运行期异常,非运行期异常不会触发rollback 25 throw new RuntimeException("1"); 26 } 27 28 29 }
转载于:https://www.cnblogs.com/xuzekun/p/7399523.html
8.Spring整合Hibernate_2_声明式的事务管理(Annotation的方式)相关推荐
- Spring整合Hibernate 二 - 声明式的事务管理
Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: <bean id="txManager" class="o ...
- Spring整合JMS(四)——事务管理
2019独角兽企业重金招聘Python工程师标准>>> Spring整合JMS(四)--事务管理 博客分类: Spring Jms SpringJMS事务sessionTransac ...
- Spring Boot中声明式数据库事务使用与理解
JDBC的数据库事务 传统JDBC的数据库事务的一个示例如下代码所示,该示例仅为一个insertUser方法的数据库事务过程.可以看到,如果还存在很多其他的数据库事务需要,则需要编写很多类似于如下的代 ...
- Spring-09 整合mybatis声明式事务
声明式事务 回顾事务 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎!事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性. 事务就是把一系列的动作当成一个独立的工作单 ...
- spring框架学习 - Data Access之 事务管理 - 声明式事务管理
接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122085016?spm=1001.2014.3001.5502 4.声明式事务管理 ...
- Spring详解(八)------事务管理
目录 1.事务介绍 2.事务的四个特性(ACID) 3.Spring 事务管理的核心接口 4. PlatformTransactionManager 事务管理器 5.TransactionStatu ...
- spring事务管理几种方式(转)
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
- Spring+Mybatis+MySql+Maven 简单的事务管理案例
利用Maven来管理项目中的JAR包,同时使用Spring在业务处理层进行事务管理.数据库使用MySq,数据处理层使用Spring和Mybatis结合. 本案例代码主要结构如图: 1.数据库脚本 -- ...
- Spring中两种编程式事务管理
Spring中两种编程式事务管理 在代码中显示调用beginTransaction,commit,rollback等与事务处理相关的方法,这就是编程式事务管理,当只有少数事务操作时,编程式事务管理才比 ...
最新文章
- STM32 SPI难点浅析
- ABAP实践学习--灰色的ALV显示
- gnuplot绘图,使用C语言输出
- 精通Android3笔记--第四章
- mysql数据库新建一个递增的_分享一个mysql实验—基于数据库事务隔离级别RR及RC的测试...
- 完整的WebApplication JSF EJB JPA JAAS –第1部分
- 软件工程师必学的9件事
- 微信页面设计 小总结
- 【Java程序设计】图形用户界面(一)
- HTML的Form和XFORM的区别,Xform是什么意思
- bryntum Kanban Task Board 5.1.0 JS 看板
- 网站设计的好坏对宣传的效果的影响!
- 支付宝和微信支付合作伙伴RiverPay加速全球化战略布局
- Android外接midi设备的录音
- 四川大学信息服务平台 ScuInfo网页 JSON数据解析
- 什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
- 记录java围棋小游戏心得
- SD Formatter
- python——编写6位数全数字弱口令小脚本
- 尼桑软件测试标准,2020款东风日产轩逸日常实用性测试报告