SSM框架-Spring4
目录一、使用Spring整合Mybatis二、Spring的事务处理1.什么是事务2.Spring的事务管理的API3.使用XML完成Spring的事务配置4.Spring中事务使用注意5.使用注解完成事务一、使用Spring整合Mybatis1.需要写一个除了spring.xml配置文件以外的配置文件这个配置文件中使用的约束是和spring.xml配置文件的的约束是一致的。2.在这个新写的配置文件中使用bean标签去接管spring-jdbc-x.x.x.RELEASE.jar包下面的包org.springframework.jdbc.datasource.DriverManagerDataSource中的DriverManagerDataSource类这个相当于定义了一个数据源。3.接管完DriverManagerDataSource类之后需要给这个类中的连接数据库的参数去赋值使用property标签。4.使用context:property-placeholder locationclasspath:db.properties/context:property-placeholder标签去加载连接数据库的参数文件db.properties是参数文件。5.最后使用property namedriverClassName value${mysql.driver}/property标签去动态的获取db.propertioes参数文件中的连接数据库的参数${这个里面的参数文件的的key}。6.完成上面一系列操作之后就可以去创建SqlSessionFactory对象了创建这个对象需要使用bean标签去接管mybatis-spring-x.x.x.jar包下面的包org.mybatis.spring.SqlSessionFactoryBean中的SqlSessionFactoryBean类。这个mybatis-spring-x.x.x.jar包是spring和mybatis的整合包。1注意这个bean标签的id可以写也可以不写因为这个类创建出对象后并不需要我们去调用它是由系统调用的。7.接下来我们需要对这个SqlSessionFactoryBean类中所持有的DataSource属性去赋值这个DataSource代表了数据源使用property namedataSource ref上面定义数据源的bean标签的id/property这个标签去赋值。8.扫描mapper包下面的所有的接口使用bean对象接管mybatis-spring-x.x.x.jar包下面的包org.mybatis.spring.mapper.MapperScannerConfigurer中的MapperScannerConfigurer类。9.接下来我们需要对MapperScannerConfigurer类中的basePackage属性赋值使用property namebasePackage valuemapper包所在的路径/property标签去赋值。10.案例?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:contexthttp://www.springframework.org/schema/context xsi:schemaLocation http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd !--从src目录下加载db.properties文件,classpath表示从src目录下开始-- context:property-placeholder locationclasspath:db.properties/context:property-placeholder !--数据源DriverManagerDataSource dataSource new DriverManagerDataSource()-- bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSource property namedriverClassName value${mysql.driver}/property property nameurl value${mysql.url}/property property nameusername value${mysql.username}/property property namepassword value${mysql.password}/property /bean !--相当于SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream); SqlSessionFactoryBean是spring中提供用来整合mybatis的类 SqlSessionFactoryBean对象由spring容器根据类型从bean的缓存池中找到使用 -- bean classorg.mybatis.spring.SqlSessionFactoryBean property namedataSource refdataSource/property /bean !--扫描com.spring.mapper包下所有接口-- bean classorg.mybatis.spring.mapper.MapperScannerConfigurer property namebasePackage valuecom.spring.mapper/property /bean /beans二、Spring的事务处理1.什么是事务1事务逻辑上的一组操作组成这组操作的各个单元要么全都成功要么全都失败。2.Spring的事务管理的API1Platform TransctionManager平台事务管理器接口是Spring用于管理事务的真正的对象DataSourceTransactionManager底层使用JDBC管理事务。HibernateTransactionManager底层使用Hibernate管理事务2TransactionDefinition事务定义信息用于定义事务的相关的信息隔离级别、超时信息、传播行为(DML)、是否只读(查询)。3TransactionStatus事务的状态用于记录在事务管理过程中事务的状态的对象。4事务管理的API的关系Spring进行事务管理的时候首先平台事务管理器根据事务定义信息进行事务的管理在事务管理过程中产生各种状态将这些状态的信息记录到事务状态的对象中。Spring的事务的传播行为Spring中提供了七种事务的传播行为保证多个操作在同一个事务中PRORAGATION_REQUIRED默认值(一般都只要用这个)如果A中有事务使用A中的事务如果A中没有事务则创建一个新的事务将操作包含进来。PROPAGATION_SUPPORTS支持事务如果A中有事务使用A中的事务。如果A没有事务则不使用事务。PROPAGATION_MANDATORY如果A中有事务使用A中的事务。如果A没有事务抛出异常。保证多个操作不在同一个事务中PROPAGATION_REQUIRES_NEW如果A中有事务将A的事务挂起(暂停)创建新事务只包含自身操作。如果A中没有事务创建一个新事务包含自身操作。PROPAGATION_NOT_SUPPORTED如果A中有事务将A的事务挂起。不使用事务管理。PROPAGATION_NEVER如果A中有事务报异常。嵌套式事务PROPAGATION_NESTED嵌套事务如果A中有事务按照A的事务执行执行完成后设置一个保存点执行B中的操作如果没有异常执行通过如果有异常可以选择回滚到最初位置也可以回滚到保存点。3.使用XML完成Spring的事务配置1需要先配置事务管理器的切面也就是使用bean标签去接管包org.springframework.jdbc.datasource.DataSourceTransactionManager中的DataSourceTransactionManager类前面说过这个类是Spring用于管理事务的对象。2接管完成后使用property去为这个类中的dataSource属性去赋值赋值一个数据源就可以了可以使用前写过的。3接下来就是去配置事务的传播行为使用下面的一组标签其中tx:method nametransferAccount propagationREQUIRED/这个标签的name属性代表了你要使用事务的方法名必须和你要使用事务的方法名一致不然事务不生效propagation属性代表的就是传播行为而外层的tx:advice标签中的属性transaction-manager的值是上面配置事务管理器的切面时使用bean标签接管DataSourceTransactionManager类的bean标签id。tx:advice idabc transaction-managertransactionMananger tx:attributes tx:method nametransferAccount propagationREQUIRED/ /tx:attributes /tx:advice4最后在把事务传播行为应用到指定的方法上使用aop:config/aop:config然后在这个aop:config标签之间使用aop:advisor id上面配置事务传播行为的最外层标签的id pointcutexecution(* 包名.类名.方法名(..))/aop:advisor标签将事务传播行为应用到指定的方法上。5案例?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:aophttp://www.springframework.org/schema/aop xmlns:txhttp://www.springframework.org/schema/tx xsi:schemaLocation http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd !-- bean definitions here -- !-- 配置事物管理器的切面 Spring中使用DataSourceTransactionManager对象来管理事务这里可以设置事务的传播行为 DataSourceTransactionManager transactionMananger new DataSourceTransactionManager() -- bean idtransactionMananger classorg.springframework.jdbc.datasource.DataSourceTransactionManager property namedataSource refdataSource/ /bean !-- 配置事物传播行为 其实就是哪些方法应该受什么样的事物控制-- tx:advice idabc transaction-managertransactionMananger tx:attributes tx:method nametransferAccount propagationREQUIRED/ /tx:attributes /tx:advice !-- 把REQUIRED事务传播行为应用到指定的方法(transferAccount)上 使用spring的aop编程获取到需要使用事务的切入点(方法)transferAccount() -- aop:config aop:advisor advice-refabc pointcutexecution(* com.spring.service.impl.AccountServiceImpl.transferAccount(..))/ /aop:config /beans4.Spring中事务使用注意1spring对事务的处理是在底层捕捉RuntimeException异常进行处理的所以在有事务的地方不要手动try catch异常信息否则事务会失效。5.使用注解完成事务1需要先配置事务管理器的切面也就是使用bean标签去接管包org.springframework.jdbc.datasource.DataSourceTransactionManager中的DataSourceTransactionManager类前面说过这个类是Spring用于管理事务的对象。2开启注解方式事务的处理使用tx:annotation-driven transaction-manager上面配置切面时使用bean标签接管类的bean标签id /tx:annotation-driven标签。3在需要使用注解的方法上面加一个Transactional(propagation Propagation.REQUIRED)注解就可以了括号中是用来配置事务的传播行为的。4案例?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:aophttp://www.springframework.org/schema/aop xmlns:txhttp://www.springframework.org/schema/tx xsi:schemaLocation http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd !-- bean definitions here -- !-- 配置事物管理器的切面 Spring中使用DataSourceTransactionManager对象来管理事务这里可以设置事务的传播行为 DataSourceTransactionManager transactionMananger new DataSourceTransactionManager() -- bean idtransactionMananger classorg.springframework.jdbc.datasource.DataSourceTransactionManager property namedataSource refdataSource/ /bean !--开启注解方式事务的处理-- tx:annotation-driven transaction-managertransactionMananger /tx:annotation-driven /beans

相关新闻

Windows系统Anaconda安装配置全攻略:从下载到环境管理

Windows系统Anaconda安装配置全攻略:从下载到环境管理

1. 项目概述:为什么在Windows上安装Anaconda是数据科学的第一步如果你刚开始接触Python编程、数据分析或者机器学习,那么Anaconda这个名字你肯定不陌生。它远不止是一个Python发行版,而是一个为你量身打造的数据科学“全家桶”。想象一下&…

2026/10/11 12:50:36 阅读更多 →
Timeline‑Studio:基于Agent Skill,实现浏览器端AI智能体全自动剪辑

Timeline‑Studio:基于Agent Skill,实现浏览器端AI智能体全自动剪辑

前言 市面上多数AI剪辑产品,本质是调用云端接口生成视频,AI只能拿到最终生成结果,无法真正操作编辑器UI界面。一旦碰到素材加载失败、弹窗、时间轴边界异常,自动化流程直接中断。 Timeline‑Studio是开源浏览器本地AI视频编辑器…

2026/10/7 14:56:56 阅读更多 →
Cadence Allegro PCB设计进阶:Shape铺铜与Line走线高效修改实战指南

Cadence Allegro PCB设计进阶:Shape铺铜与Line走线高效修改实战指南

1. 从“能用”到“好用”:为什么Shape和Line的修改是PCB设计的核心在Cadence Allegro这个庞大的PCB设计工具里,铺铜(Shape)和走线(Line)的修改,可能是我们每天点击次数最多的操作。很多工程师&a…

2026/10/9 17:13:53 阅读更多 →

最新新闻

面对模糊需求如何落地项目?从rea代号拆解到技术选型与实现

面对模糊需求如何落地项目?从rea代号拆解到技术选型与实现

1. 当标题只剩三个字母:一次“信息真空”下的项目复盘拿到“rea”这个标题的时候,我第一反应是愣了一下。没有项目正文,没有关键词,没有摘要描述,连热搜词和网络热词都是空的。换句话说,这是一个几乎零信息…

2026/10/11 13:11:50 阅读更多 →
HBuilderX.zip解压即用原理与跨端开发实战指南

HBuilderX.zip解压即用原理与跨端开发实战指南

简介:本资源为HBuilderX官方集成开发环境安装包,面向前端开发者、uniapp初学者及跨平台应用实践者,解决Vue.js与多端项目开发环境快速搭建问题。压缩包为标准ZIP格式,大小306.77MB,内含完整可执行安装程序及配套运行时…

2026/10/11 13:11:50 阅读更多 →
PHP风控实战:活体识别集成方案与接口对接详解

PHP风控实战:活体识别集成方案与接口对接详解

1. 风控场景下的活体识别需求拆解1.1 为什么传统身份核验方式已经不够用了做过风控系统的人都有一个共识:身份核验这件事,从来不是"验一次就完事"的。早些年大家做实名认证,无非就是姓名加身份证号二要素比对,后来升级到…

2026/10/11 13:11:50 阅读更多 →
WIN7老主板USB3.0驱动安装与DISM镜像注入实战指南

WIN7老主板USB3.0驱动安装与DISM镜像注入实战指南

简介:这份资源是专为Windows 7系统准备的USB3.0驱动程序包,主要面向使用SKYLAKE平台及以上CPU、需要通过USB设备安装或恢复系统的用户。在原生支持USB3.1但向下兼容USB3.0的硬件环境下,若未预先加载该驱动,Win7安装程序往往无法识…

2026/10/11 13:11:50 阅读更多 →
Java 实现 HEIC 转 PNG/JPEG 全攻略:选型、性能与避坑

Java 实现 HEIC 转 PNG/JPEG 全攻略:选型、性能与避坑

简介:这份资源面向需要在Java环境中处理HEIC图片的开发者,尤其是遇到苹果设备素材、旧系统或第三方库不支持该格式的兼容性场景。HEIC基于HEVC编码,压缩效率优于JPEG,但Java标准库并不原生支持解码,因此项目围绕借助Im…

2026/10/11 13:11:50 阅读更多 →
代码随想录67天刷题总结:算法模板、避坑与面试转化

代码随想录67天刷题总结:算法模板、避坑与面试转化

代码随想录刷到第67天,说实话,这一天比我想象中来得平静。没有“终于结束了”的解脱感,也没有“我全都学会了”的兴奋,更多的是一种踏实的收束感。从第一天的数组二分查找开始,到后来二叉树、回溯、动规、单调栈&#…

2026/10/11 13:10:49 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →