当前位置: 首页 > news >正文

系列九、声明式事务(xml方式)

一、概述

         声明式事务(declarative transaction management)是Spring提供的对程序事务管理的一种方式,Spring的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,是指在配置文件中声明,用在Spring配置文件中声明式的处理事务来代替业务逻辑中使用代码处理事务,这样做的好处是:事务管理不侵入开发的组件,具体来说就是业务逻辑对象不会意识到自己正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策略的话,也只需要在配置文件中修改配置即可,在不需要事务管理的时候,修改一下配置信息,即可移除事务管理服务,无需改变代码重新编译,这样维护起来也很方便,Spring中是使用aop来完成声明式事务管理的,因而声明式事务是以方法为单位的,也即声明式事务是作用在业务方法上的。

二、声明式事务(xml方式)环境搭建

2.1、项目概览

2.2、配置思路

第一步:配置事务管理器;

第二步:配置事务要处理的方法;注意事项:一旦配置了事务方法名称规则后,service中的方法一定要按照这里配置的名称,否则事务配置不生效;

第三步:配置aop;

2.3、pom.xml

同 系列八 pom.xml 

2.4、applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 组件扫描 --><context:component-scan base-package="org.star"/><!-- 数据源 --><context:property-placeholder location="db.properties"/><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${db.driver}"/><property name="url" value="${db.url}"/><property name="username" value="${db.username}"/><property name="password" value="${db.password}"/></bean><!--配置sqlSessionFactory:读取配置文件,获取数据库相关的信息--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="typeAliasesPackage" value="org.star.entity.model"></property><property name="mapperLocations" value="classpath:mapper/*.xml"></property><property name="configuration"><bean class="org.apache.ibatis.session.Configuration"><property name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"></property></bean></property><!-- 分页插件 --><property name="plugins"><array><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><!--reasonable=true解释:如果用户输入的不合理的pageSize参数,pageHelper会自动进行调整--><value>helperDialect=mysqlreasonable=true</value></property></bean></array></property></bean><!--配置mapper接口的位置,并指定sqlSessionFactorysqlSession = sqlSessionFactory.openSession();mapper = sqlSession.getMapper();--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="org.star.mapper"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!--声明式事务配置:spring中的事务是基于aop实现,但使用的不是通知而是拦截器--><tx:advice id="txAdvice" transaction-manager="transactionManager"><!-- 定义事务的对象信息 --><tx:attributes><!-- transfer*:表示以transfer开头的所有方法 --><tx:method name="transfer*" propagation="REQUIRED" isolation="DEFAULT"/></tx:attributes></tx:advice><!-- aop配置 --><aop:config><aop:pointcut id="txPointCut" expression="execution(* org.star.service.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"></aop:advisor></aop:config></beans>

2.5、db.properties

同 系列八 db.properties 

2.6、AccountDO.java

同 系列八 AccountDO.java 

2.7、AccountMapper.java

同 系列八 AccountMapper.java

2.8、AccountMapper.xml

同 系列八 AccountMapper.xml

2.9、AccountService.java

同 系列八 AccountService.java

2.10、AccountServiceImpl.java

/*** @Author : 一叶浮萍归大海* @Date: 2023/11/24 8:25* @Description:*/
@Service
public class AccountServiceImpl implements AccountService {@Resourceprivate AccountMapper accountMapper;/*** 转账** @return*/@Overridepublic void transferMoney() {try {// Jack 转出100元accountMapper.accountExpenditure("Jack", 100);// 模拟异常int i = 10 /0;// Rose 入账100元accountMapper.accountEntry("Rose", 100);} catch (Exception e) {throw new RuntimeException(e);}}
}

2.11、SpringJunitTest.java

同 系列八 SpringJunitTest.java

相关文章:

  • pop链反序列化 [MRCTF2020]Ezpop1
  • 微信小程序便民小工具源码
  • Kotlin学习——kt中的类,数据类 枚举类 密封类,以及对象
  • CAN通信协议
  • 论文导读 | 10月专题内容精选:人的预测
  • 面向对象编程:Rust的面向对象特性
  • 电机应用-直流有刷电机多环控制实现
  • Namecheap怎么样,Namecheap优惠码以及注册手把手教程
  • 4.整数输入,并输出变量类型【2023.11.26】
  • Docker Swarm总结+CI/CD Devops、gitlab、sonarqube以及harbor的安装集成配置(3/4)
  • 计算机毕业设计 基于Hadoop的物品租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 性能测试必看系列之Jmeter:硬件性能监控指标
  • pycharm 创建的django目录和命令行创建的django再使用pycharm打开的目录对比截图 及相关
  • React入门使用 (官方文档向 Part1)
  • C++11『lambda表达式 ‖ 线程库 ‖ 包装器』
  • canvas 高仿 Apple Watch 表盘
  • Java IO学习笔记一
  • Java-详解HashMap
  • jdbc就是这么简单
  • JS笔记四:作用域、变量(函数)提升
  • php面试题 汇集2
  • Spring Boot快速入门(一):Hello Spring Boot
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 阿里云应用高可用服务公测发布
  • 和 || 运算
  • 回顾2016
  • 计算机常识 - 收藏集 - 掘金
  • 解析带emoji和链接的聊天系统消息
  • 面试遇到的一些题
  • 异常机制详解
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • Linux权限管理(week1_day5)--技术流ken
  • ​Spring Boot 分片上传文件
  • ​批处理文件中的errorlevel用法
  • #图像处理
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (差分)胡桃爱原石
  • (多级缓存)缓存同步
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)计算机毕业设计高校学生选课系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net 简单实现MD5
  • .NET 设计模式初探
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET的数据绑定
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET中winform传递参数至Url并获得返回值或文件
  • @GetMapping和@RequestMapping的区别
  • [ SNOI 2013 ] Quare
  • [.net]官方水晶报表的使用以演示下载
  • [20160807][系统设计的三次迭代]
  • [Angular 基础] - 表单:响应式表单