首页 > 其他分享 >Spring+MyBatis声明事务

Spring+MyBatis声明事务

时间:2023-02-14 20:32:05浏览次数:49  
标签:事务 管理器 name tx Spring propagation 当前 MyBatis

一、原则

在之前的开发中,事务代码都是分布在业务代码中,难以重用,调整麻烦。所以,Spring提供了声明事务,将事务代码和业务代码分离,再使用AOP实现,事务代码全部在配置文件中完成。

二、步骤

  1. 再Spring配置文件中导入两个命名空间tx和aop;
  2. 注册事务管理器对象,DataSourceTransactionManager,需要引用数据源组件;
  3. 配置事务增强,绑定事务管理器,并为不同事务业务方法设置具体的事务规则;
  4. 配置事务切面,设置切入点,并将事务增强与切入点关联;

<!--事务管理部分-->

<!--1、注册事务管理器对象,DataSourceTransactionManager,需要引用数据源组件-->

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"/>

</bean>

<!--2、配置事务增强,绑定事务管理器,并为不同事务业务方法设置具体的事务规则-->

<tx:advice id="txAdvice" transaction-manager="txManager">

<tx:attributes>

<tx:method name="find*" propagation="SUPPORTS"/>

<tx:method name="add*" propagation="REQUIRED"/>

<tx:method name="remove*" propagation="REQUIRED"/>

<tx:method name="modify*" propagation="REQUIRED"/>

<tx:method name="*" propagation="REQUIRED"/>

</tx:attributes>

</tx:advice>

<!--3、配置事务切面,设置切入点,并将事务增强与切入点关联-->

<aop:config>

<aop:pointcut id="serviceMethod" expression="execution(* smbms.service.*(..))"/>

<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>

</aop:config>

propagation:事务传播机制

REQUIRED 默认,如果当前事务存在,则既加入到当前事务中,否则创建新的事务;

SUPPORTS:如果当前事务存在,则既加入到当前事务中,否则非事务的方式执行;

MANDATORY 如果当前事务存在,则加入到当前事务中,否则抛出异常

REQUIRES_NEW 创建一个新的事务,如果当前事务存在,则挂起当前事务。挂起操作并不是开箱即用的,只对特定的事务管理器有效

NOT_SUPPORTED 以非事务的方式执行,如果存在当前事务,则挂起当前事务。挂起操作并不是开箱即用的,只对特定的事务管理器有效

NEVER         以非事务的方式执行,如果存在当前事务,则抛出异常

NESTED         如果当前事务存在,则在当前事务中创建一个内嵌的事务。内嵌事务的创建对特定的事务管理器是开箱即用的:工作在JDBC 3.0驱动上的DataSourceTransactionManager


isolation:事务隔离等级

常用值:

DEFAULT(默认)使用数据库的默认事务隔离;

READ_COMMITTED:未提交读;

READ_UNCOMMITTED:提交读;

REPEATABLE_READ:可重复读;

SERIALIZABLE:串行读;


timeout:事务超时时间,允许事务运行的最长时间,以秒为单位,默认值为:-1(表示永不超时)

read-only:事务是否为只读状态,默认为false

rollback-for:设定能够触发回滚的异常类型

PS:1.Spring默认只在输出runtimeException才标识事务的回滚

   2.可以通过全限定类名指定需要回滚事务的异常,多个类名用到逗号隔开

no-rollback-for:设定不触发回滚的异常类型

PS:1.Spring默认checkedException不会触发事务回滚

   2.可以通过全限定类名指定不需回滚事务的异常,多个类名用英文逗号隔开

标签:事务,管理器,name,tx,Spring,propagation,当前,MyBatis
From: https://blog.51cto.com/u_15907719/6057399

相关文章

  • Mybatis17 - 逆向工程
    概念正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:Java......
  • Mybatis18 - 分页插件
    分页插件JavaWeb服务器实现分页需要在SQL中使用limit,需要获取index,pageSize,pageNum等数据pageSize:每页显示的条数pageNum:当前页的页码index:当前页的起始索引,i......
  • Mybatis13 - 缓存介绍
    介绍理解缓存的工作机制和缓存的用途。1、缓存机制介绍2、一级缓存和二级缓存①使用顺序查询的顺序是:先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的......
  • Mybatis12 - 动态SQL
    动态SQLMybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。Oneofthemostpowerfulfeatures......
  • Mybatis14 - 一级缓存
    一级缓存(默认开启)MyBatis的一级缓存是SqlSession级别的,即通过同一个SqlSession查询的数据会被缓存再次使用同一个SqlSession查询同一条数据,会从缓存中获取1、代码验证......
  • Mybatis15 - 二级缓存
    二级缓存(手动开启)这里我们使用的是Mybatis自带的二级缓存,也可以称之为是内置的。二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结......
  • Mybatis16 - 第三方缓存 EHCaChe
    1.EHCache简介官网地址:https://www.ehcache.org/Ehcacheisanopensource,standards-basedcachethatboostsperformance,offloadsyourdatabase,andsimplif......
  • Spring Boot、Spring Cloud、Dubbo的区别
    转载自:https://blog.csdn.net/zzhuan_1/article/details/80782236https://blog.csdn.net/qq591009234/article/details/105041847============ Springboot是Spr......
  • SpringMVC的视图
    目录ThymeleafView转发视图重定向视图视图控制器view-controllerSpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户SpringMVC视图的种类很多,......
  • spring-data-jpa
    spring-data-jpa一、什么是jpa?查询语言:JPQL,面向对象的查询语句1.1相同处:都跟数据库操作有关,JPA是JDBC的升华,升级版。JDBC和JPA都是一组规范接口1.2不同处:JDBC......