spring的事物

news2025/4/21 11:16:31

这是我第三次接触事物了,mysql一次,以前的也看过一次。

事物的四大特点:

原子性:多条sql保证同时成功,同时失败。

一致性:在事物的开启和结束,数据库的完整性不被破坏。

隔离性:多线程时,要保证数据的安全,也就是并发安全。

持久性:事物处理后,对数据的修改是永久的,一旦执行事物成功,就刷新到数据库。

其实主要还是第一句:同时成功,同时失败! 

所以,我们开启事物,就是为了利用上面的四个特点,解决问题。

那么,spring是如何实现的,归根结底,我们很多时候,只需要开启事物就行了,底层已经被spring完成了:

使用这种方式的前提是,已经集成了spring-mybatis

第一种方法:

声明式事物(通过xml声明事物,然后利用spring的AOP织入到方法中)

使用DataSourceTransactionManager类进行事物托管。

<?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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://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/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
">
    <!--   连接池-->
    <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/user?UseSSL=false"></property>
        <property name="username" value="root"></property>
        <property name="password" value="qx@123456"></property>
    </bean>
    <!--sqlsessin工厂-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"></property>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:*.xml"></property>
    </bean>
    <!--spring的模板-->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>


    <bean id="userMapper2" class="com.quxiao.mapper.UserMapper2">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>
    <!--    声明事务-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="datasource"></property>
    </bean>
    <!--       配置事物管理,比如全部方法加上事物-->
    <tx:advice id="interceptor" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <!--    aop织入-->
    <aop:config>
        <aop:pointcut id="point" expression="execution(* com.quxiao.mapper.*.*(..))"/>
        <aop:advisor advice-ref="interceptor" pointcut-ref="point"></aop:advisor>
    </aop:config>

    <!--    开启注解Apo-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    <!--    开启注解事物代理-->
    <tx:annotation-driven></tx:annotation-driven>
    <!--    刚刚的错误是因为没有开启注解事物代理-->
    <!--    aop模式下的注解失败没搞懂,显示获取不到bean-->
</beans>

不知道为啥,重新写了一遍声明式事物,就可以使用了,原来的报错找不到Bean。

至于集成mybatis的代码,在前面写过博客(8条消息) 踩大坑mevan静态资源第二次害死我,以及自己的马虎,又又又害死自己,spring-mybatis_小肖在路上的博客-CSDN博客

打代码还是太马虎了。。。

注解式事物: 通过使用@Transactional注解,底层当是使用Java的反射,然后进行开启事物。

 

要开启同时还要在配置文件xml中开启注解事物的支持:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/520937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos7 配置密钥登录

目录 1.xshell生成公钥 1.工具->新建用户密钥生成导向 2.选择4096下一步​编辑 3.输入用户密钥密码&#xff0c;也可以不输入 4.保存为文件 5.导出私钥文件 2.服务器配置 1.将公钥文件上传至服务器上 3.链接服务器 1.新建连接配置ip 2.设置用户身份验证 3.选择1.5上…

大疆无人机空三建模干货分享(大疆智图集群建模超详细教程)

Part 01 大疆无人机空三建模干货分享(大疆智图集群建模超详细教程) 大疆智图集群简介 大疆在今年5月推出的智图3.0.0及以上版本中加入了集群功能&#xff0c;有集群版许可的用户可以使用此功能。智图集群是由一台主节点分配任务控制多台同局域网内子节点设备进行空三和建模。集…

【Java零基础入门篇】第 ④ 期 - 继承(三)

【Java零基础入门篇】第 ④ 期 - 继承&#xff08;三&#xff09; 博主&#xff1a;命运之光专栏&#xff1a;Java零基础入门 学习目标 1.掌握继承性的主要作用、实现、使用限制&#xff1b; 2.掌握this和super的含义及其用法&#xff1b; 3.掌握方法覆写的操作&#xff1b; 4.…

内网渗透(七十)之域权限维持之重置DSRM密码

重置DSRM密码 目录服务还原模式(DSRM)是Windows域环境中域控的安全模式启动选项。每个域控都有一个本地管理员administrator账户,也就是(DSRM账户)。DSRM的用途是允许管理员在域环境出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常。也就是说,DS…

关于安卓毛玻璃实现(三)recyclerview静态毛玻璃

背景 毛玻璃&#xff0c;开发中又爱又恨的一个话题&#xff0c;玩法层出不穷&#xff0c;有动态的&#xff0c;也有静态的。有的是实时模糊&#xff0c;有些只需要模糊一次&#xff0c;本文的毛玻璃实现&#xff0c;就是静态毛玻璃。 开发环境 win 10 as 4 jdk 1.8 代码 &…

在中国,年收入20W是什么水平?答案扎心了(文末附最新招聘)

最近关于“年薪20万算什么水平&#xff1f;”冲上了热搜。对此&#xff0c;许多网友纷纷表示自己的看法&#xff0c;有的认为这个收入属于中高收入人群了。 因为按照最近某招聘网站发布的《中国企业招聘薪酬报告》来看&#xff0c;今年一季度38城企业平均招聘薪酬为10101元&…

用 ChatGPT 读 Vue3 源码,会怎么样?

前言 ChatGPT 最近十分火爆&#xff0c;今天我也来让 ChatGPT 帮我阅读一下 Vue3 的源代码。 都知道 Vue3 组件有一个 setup函数。那么它内部做了什么呢&#xff0c;今天跟随 ChatGPT 来一探究竟。 实战 setup 函数在什么位置呢&#xff0c;我们不知道他的实现函数名称&…

Ebean 字段别名配置引发语法问题

前言 Ebean 没听过&#xff1f;这里简单给你介绍下&#xff1a;Ebean 是一个 Java ORM&#xff08;Object-Relational Mapping&#xff09;框架&#xff0c;具有以下优势&#xff1a; 简单易用&#xff1a;Ebean 的 API 设计简单易用&#xff0c;可以快速上手&#xff0c;无需…

OpenGL高级-GLSL

引言 我们会讨论一些内建变量(Built-in Variable)、组织着色器输入和输出的新方式以及一个叫做uniform缓冲对象(Uniform Buffer Object)的非常有用的工具。 GLSL的内建变量 着色器是很小的&#xff0c;如果我们需要从当前着色器以外的别的资源里的数据&#xff0c;那么我们就不…

ChatGPT系列学习(1)transformer基本原理讲解

文章目录 1. 简介1.1. 发展史 2. Transformer 整体结构3. 名词解释3.1. token 4. transformer输入4.1. 单词 Embedding4.2. 位置Embedding4.3. Transformer Embedding层实现 5. Attention结构5.1. 简介5.2. Self Attention&#xff08;自注意力机制&#xff09;5.2.1. 简介5.2.…

Python 密码破解指南:20~24

协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【OpenDocCN 饱和式翻译计划】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 收割 SB 的人会被 SB 们封神&#xff0c;试图唤醒 SB 的人是 SB 眼中的 SB。——SB 第三定律 二十、…

HashMap源码和原理

HashMap源码分析 重要变量: Node<K,V>[] table 存放单链表头结点的数组size 存储结点数量threshold 阈值,通过size和threshold比较来做扩容loadFactor 加载因子 重要方法: put(K key, V value) 添加结点get(Object key) 查询结点 单链表Node结点中的一些变量: hash …

《程序员面试金典(第6版)》面试题 16.20. T9键盘(哈希映射,C++)

题目描述 在老式手机上&#xff0c;用户通过数字键盘输入&#xff0c;手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列&#xff0c;实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。&#xff08;原题链接&#xff09; …

程序的灵魂-数据结构

1、数据结构 程序 数据结构 算法 1.1、何为数据结构? 数据结构是计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的 数据结构是为了更加方便的管理和使用数据&#xff0c;需要结合具体的业务场景来进行选择 通常情况下&#xff0c;精心选择的数…

爆肝一周,我开源了ChatGPT 中文版接口,官方1:1镜像支持全部 官方接口

这里实现我之前文章承诺承接上文 人人实现ChatGPT自由&#xff0c;手把手教你零撸部署自己聊天私服 现在ChatGPT 提供了api接口 可以让我自己对接去实现我们自己想要gpt应用&#xff0c;但是由于一些原因&#xff0c;国内也不开放接口&#xff0c;所以我就1:1 自己对接了官方…

计算机毕业论文内容参考|基于java的研发部署管理平台的设计与实现

文章目录 导文文章重点摘要前言绪论课题背景国内外现状与趋势课题内容应用程序生命周期管理。相关技术与方法介绍系统分析系统设计系统实现系统测试总结和展望本文总结后续工作展望导文 基于java的研发部署管理平台的设计与实现 文章重点 摘要 本文介绍了基于Java的研发部署管…

UNIAPP实战项目笔记71 订单到支付和生成订单号的前后端交互

UNIAPP实战项目笔记71 订单到支付和生成订单号的前后端交互 思路 购物车页面点击结算 发送请求: 传递商品数据 前端就拿到了订单号进行存储 并且跳转到确认订单页面 后端 生成一个订单,并且返回给前端一个订单号 确认订单页面 点击提交订单 前端 判断是否选择了收货地址 …

QT+OpenCV 编译成功

VSQTOpenCV 真费劲 忙活半天算是有效果了 #include "opencv2/opencv.hpp"; using namespace cv;Demo1::Demo1(QWidget* parent): QMainWindow(parent) {ui.setupUi(this);connect(ui.btn, SIGNAL(clicked()), this, SLOT(Btn1Click())); }void Demo1::Btn1Click() {Q…

如何动态的测试Thrift服务

​RPC协议与Thrift框架 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种通信协议&#xff0c;用于不同的进程或计算机之间进行通信和交互。它允许应用程序在本地或远程计算机上调用另一个应用程序中的函数或方法&#xff0c;就像调用本地函数…

asp.net+sqlserver校园超市进销存管理系统的开发与设计

随校园超市管理系统功能&#xff1a;包括&#xff0c;管理员登录、员工登录&#xff1b;商品信息管理&#xff0c;能够查看商品的基本信息&#xff0c;对商品的基本信息进行修改&#xff1b;员工信息管理&#xff0c;管理员工基本信息&#xff0c;设置与不同的权限&#xff0c;…