Spring之声明式事务(十一)-程序员宅基地

技术标签: # Spring  

Spring之声明式事务

1.回顾事务

  • 把一组业务当成一个业务来做;要么都成功,要么都失败!
  • 事务在项目开发中,十分的重要,涉及到数据的一致性问题,不能马虎!
  • 确保完整性和一致性;

事务ACID原则:

  • 原则性
  • 一致性
  • 隔离性
    • 多个业务可能操作同一个资源,防止数据损坏
  • 持久性
    • 事务一旦提交,无论系统发生什么问题,结果都不会再被影响,被持久化的写到存储器中!

2.spring中的事务管理

  • 声明式事务:AOP
  • 编程式事务:需要再代码中,进行事务的管理

配置事务的代码:

<?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">

    <!--DataSource:使用Spring的数据源替换Mybatis的配置 c3p0 dbcp druid
      我们这里使用Spring提供的JDBC:org.springframework.jdbc.datasource-->
    <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url"
                  value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <!-- sqlSessionFactory  -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource"></property>
        <!--        绑定Mybatis配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:com/yang/mapper/*.xml"/>
    </bean>
    <!--SqlSessionTemplate:就是我们使用的sqlSession   -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--       只能使用构造器sqlSessionFactory,因为它没有set方法 -->
        <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
    </bean>
    <!--   配置声明式事务 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="datasource"></property>
    </bean>
    <!--    结合AOP实现事务的织入-->
    <!--    配置事务通知:-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--      给哪些方法配置事务  -->
<!--        配置事务的传播特性:new propagation= -->
        <tx:attributes>
            <tx:method name="add" propagation="REQUIRED" />
            <tx:method name="delete" propagation="REQUIRED"/>
            <tx:method name="update" propagation="REQUIRED"/>
            <tx:method name="query" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
<!--    配置事务的切入-->
    <aop:config>
        <aop:pointcut id="txPointCut" expression="execution(* com.yang.mapper.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"></aop:advisor>
    </aop:config>
</beans>

UserMapper.xml

<mapper namespace="com.yang.mapper.UserMapper">
    <select id="selectUser" resultType="user">
        select * from mybatis.user;
    </select>
    <insert id="addUser" parameterType="user">
        insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
    </insert>
    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id=#{id}
    </delete>
</mapper>

UserMapperImpl

    public List<User> selectUser() {
    
        User user = new User(3, "小王", "2131231");
        UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
        mapper.addUser(user);
        mapper.deleteUser(2);
        return mapper.selectUser();

    }

思考:
为什么需要事务?

  • 如果不配置事务,可能存在数据提交不一致的情况下;
  • 如果我们不在spring中去配置声明式事务,我们就需要在代码中手动配置事务!
  • 事务在项目的开发中十分重要,设计到数据的一致性和完整性问题,不容马虎!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_50231389/article/details/117729606

智能推荐

DS212j、DS213+、DS413 找不到 Synology Drive Server 套件_ds212j管理-程序员宅基地

文章浏览阅读2.4k次。其他 NAS 型号,可以于下载中心查询是否支援 Synology Drive Server 套件。_ds212j管理

weka使用_cannot resolve weka:weka:3.6.2-程序员宅基地

文章浏览阅读1.4k次。Weka新手文章(一) 收藏数据仓库,数据分析,不涉及商业方面的高层决策之用,故本篇文章只适合初学数据仓库,为了完成老师作业,且想用weka做简单数据挖掘之用的童鞋。weka版本是3.6.2,数据库库是SQL Server 2005,没办法,老师提供的几万条数据保存在excel表中,如果从excel转为csv格式,再从weka中导入该csv文件,涉及到格式的转换,很是麻烦~况且几万条数_cannot resolve weka:weka:3.6.2

三天搞定射频识别技术(一)1.2_rfid防冲突机制-程序员宅基地

文章浏览阅读1.2k次。电子标签的概念电子标签的概念二、RFID电子标签的分类:三、RFID标签的原理四、RFID标签的组成五、RFID的工作原理阅读器和电子标签之间的射频信号的耦合类型有两种:电感耦合电磁反向散射耦合六、RFID电子标签的数据存储七、RFID低频简介八、RFID高频简介九、RFID超高频简介十、RFID微波段简介RFID电子标签的防冲撞机制面向比特的防冲突机制面向时隙的防冲突机制总结)电子标签的概念电子标签又称射频标签、应答器、数据载体;是一种存储数据识别资料的装置,可以透过无线电波与读写器之间互相传递_rfid防冲突机制

web前端(sublime):将多媒体插入网页(自动播放)_sublime音乐播放器代码-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏4次。注意:以下方法是我通过多方查找摸索拼凑出来的出来的,可能和某些书籍或博主给出的不同; 亲测能自动播放音乐,但不知道什么缘故只我再测试时只有360极速游览器可以用。 由于没开网站,效果可以自己试试(很简陋)1:代码如下:<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>歌曲</title> <style type="text/css"&g.._sublime音乐播放器代码

Android轻松搞定Dialog提示动画效果_android dialog 动画右出出入效果-程序员宅基地

文章浏览阅读8.8k次,点赞3次,收藏7次。抽个中午的时间写一篇博客,想必大家现在正在午饭呢吧,深圳的天气真是变换无常,刚刚大雨倾盆,不一会就晴天高照。打球吗?约起来哇,哈哈。。今天给大家带来一篇Dialog提示附加动画效果的功能。这种Dialog提示效果基本变成了每个App都必不可少功能。例如,退出提示,弹出分享框,App升级提示等等。。其实在Android中实现提示功能由很多种方式:自定义Dialog,AlertDialog,自_android dialog 动画右出出入效果

tff.learning 模块_tff.learning.build_federated_averaging_process-程序员宅基地

文章浏览阅读432次。tff.learning 模块用于使用联合学习算法的模型开发的公共API模块framework模块:面向开发联合学习算法的贡献者的公共API类BatchOutput类: 保存tf .learning. model输出的结构。Model类: 表示TensorFlow联邦中使用的模型。TrainableModel类: 带有用..._tff.learning.build_federated_averaging_process

随便推点

部署springboot的war包到tomcat,静态资源以及bootstrap等的url,以及controller的mapping映射等无法使用的问题_war包 静态资源必须放入 classes文件夹才能被访问到-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏3次。最近在部署一个springboot的war文件到tomcat的时候,出现了一大堆的404,找不到的问题,在eclipse调试中不曾出现。后来仔细核实发现,原来确实是路径有问题。在浏览器可以看见他的后台访问路径如下:XHR POST http://127.0.0.1:8080/home/welcome //这是一个mapping映射,到controller......_war包 静态资源必须放入 classes文件夹才能被访问到

IIS搭建网站_iis搭建网站的基本原理-程序员宅基地

文章浏览阅读202次。一. 首先开启Windows功能在这里把你需要的服务都选中,如果你不清楚具体需要哪些,不妨全部选中。二. 进入IIS管理器三. 建站把你的网站资源和文件存到一个合适的位置,为了测试我们只用最简单的示范(稍微正经一点的网页也不会像我这么写...)。<html><body><h1>My IIS Test Page</h1></body></html>..._iis搭建网站的基本原理

pandas的聚合操作: groupyby与agg_pandas group by agg-程序员宅基地

文章浏览阅读9.5k次,点赞4次,收藏9次。pandas提供基于行和列的聚合操作,groupby可理解为是基于行的,agg则是基于列的从实现上看,groupby返回的是一个DataFrameGroupBy结构,这个结构必须调用聚合函数(如sum)之后,才会得到结构为Series的数据结果。 而agg是DataFrame的直接方法,返回的也是一个DataFrame。当然,很多功能用sum、mean等等也可以实现。但是agg更加简洁, 而..._pandas group by agg

JS实现点击下拉框改变背景颜色_js select>option鼠标滑动背景色设置-程序员宅基地

文章浏览阅读4.1k次,点赞3次,收藏25次。使用onchange事件,当点击不同下拉框选项时,改变div背景颜色以及文字效果展示代码演示<!DOCTYPE html><html> <head lang="en"> <meta charset="UTF-8"> <title>onchange()</title> <style type="text/css"> #div { width: 300px; height_js select>option鼠标滑动背景色设置

计算机基础知识+数据类型_计算机中数据的分类-程序员宅基地

文章浏览阅读2.4k次。一、计算机基础知识,Java语言的概述,运行环境及开发工具的下载安装1、计算机基础知识1.1、计算机的概念什么是计算机:(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、笔记本计算机。按照规模分为微型机、小型机、大型机、巨型机(超级计算机)等。1.2、计算机的组成计算机组成大致由“计算机硬件”和“计算机软件”组成①、计算机硬件:计算机硬件(Computer_计算机中数据的分类

Mac上如何安装SketchUp Mac 2023中文激活版 支持13.x,支持 M1/M2、Intel机型,已解决在Ventura 13.x上一直打不开等问题_sketchup_pro2023 m1-程序员宅基地

文章浏览阅读1.5k次。快速导入和导出DWG,DXF,JPG,3DS格式文件,实现方案构思,效果图与施工图绘制的完美结合。专业用于 3D 建模,设计,创建和交流建筑,施工,工程等方面的创意。方便的推拉功能,设计师通过一个图形就可以方便的生成3D几何体,无需进行复杂的三维建模。适用范围广阔,可以应用在建筑,规划,园林,景观,室内以及工业设计等领域。具有草稿,线稿,透视,渲染等不同显示模式。_sketchup_pro2023 m1

推荐文章

热门文章

相关标签