声明式的事务管理(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的方式)相关推荐

  1. Spring整合Hibernate 二 - 声明式的事务管理

    Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: <bean id="txManager" class="o ...

  2. Spring整合JMS(四)——事务管理

    2019独角兽企业重金招聘Python工程师标准>>> Spring整合JMS(四)--事务管理 博客分类: Spring Jms SpringJMS事务sessionTransac ...

  3. Spring Boot中声明式数据库事务使用与理解

    JDBC的数据库事务 传统JDBC的数据库事务的一个示例如下代码所示,该示例仅为一个insertUser方法的数据库事务过程.可以看到,如果还存在很多其他的数据库事务需要,则需要编写很多类似于如下的代 ...

  4. Spring-09 整合mybatis声明式事务

    声明式事务 回顾事务 事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎!事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性. 事务就是把一系列的动作当成一个独立的工作单 ...

  5. spring框架学习 - Data Access之 事务管理 - 声明式事务管理

    接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122085016?spm=1001.2014.3001.5502 4.声明式事务管理 ...

  6. Spring详解(八)------事务管理

    目录 1.事务介绍 2.事务的四个特性(ACID) 3.Spring 事务管理的核心接口 4. PlatformTransactionManager  事务管理器 5.TransactionStatu ...

  7. spring事务管理几种方式(转)

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

  8. Spring+Mybatis+MySql+Maven 简单的事务管理案例

    利用Maven来管理项目中的JAR包,同时使用Spring在业务处理层进行事务管理.数据库使用MySq,数据处理层使用Spring和Mybatis结合. 本案例代码主要结构如图: 1.数据库脚本 -- ...

  9. Spring中两种编程式事务管理

    Spring中两种编程式事务管理 在代码中显示调用beginTransaction,commit,rollback等与事务处理相关的方法,这就是编程式事务管理,当只有少数事务操作时,编程式事务管理才比 ...

最新文章

  1. STM32 SPI难点浅析
  2. ABAP实践学习--灰色的ALV显示
  3. gnuplot绘图,使用C语言输出
  4. 精通Android3笔记--第四章
  5. mysql数据库新建一个递增的_分享一个mysql实验—基于数据库事务隔离级别RR及RC的测试...
  6. 完整的WebApplication JSF EJB JPA JAAS –第1部分
  7. 软件工程师必学的9件事
  8. 微信页面设计 小总结
  9. 【Java程序设计】图形用户界面(一)
  10. HTML的Form和XFORM的区别,Xform是什么意思
  11. bryntum Kanban Task Board 5.1.0 JS 看板
  12. 网站设计的好坏对宣传的效果的影响!
  13. 支付宝和微信支付合作伙伴RiverPay加速全球化战略布局
  14. Android外接midi设备的录音
  15. 四川大学信息服务平台 ScuInfo网页 JSON数据解析
  16. 什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
  17. 记录java围棋小游戏心得
  18. SD Formatter
  19. python——编写6位数全数字弱口令小脚本
  20. 尼桑软件测试标准,2020款东风日产轩逸日常实用性测试报告

热门文章

  1. 页面 table 可编辑的实现
  2. 网站如何做到完全不需要 jQuery ?
  3. 用户控件中动态加入脚本引用
  4. [零基础学JAVA]Java SE面向对象部分-10.面向对象基础(05)
  5. RedMonk 语言排行:Kotlin 上升 8 位,TS 快进前 10
  6. pgsql 运行状态 采集脚本
  7. Java中如何实现序列化,有什么意义?
  8. 微信上传图片 41005 缺少多媒体文件
  9. 关于SDC沙盒源代码加密
  10. mysql数据库字符集设置