首页 > 编程语言 >javaSpring操作事务

javaSpring操作事务

时间:2023-08-17 10:11:06浏览次数:33  
标签:事务 javaSpring int spring org public money 操作 id

1.什么是事务

简单理解你:事务就是将一系列动作看成是一次工作单元,又涉及到套娃了

举个栗子:

转账操作,张三向李四转账100块钱,在转账途中,突然停电,但是账单已经发出去了,这个时候如果没有事务的话,那么张三向李四转账的100块钱将不翼而飞

事务的作用,将张三和李四的的转账看成一个动作,要么全部成功,要么全部不成功

2.spring如何实现事务

2.1 所需依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.12.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.2.12.RELEASE</version>
        </dependency>
        <!--spring事务依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.12.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.15.RELEASE</version>
        </dependency>

        <!--mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <!--mybatis和spring整合的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>
        <!--druid的连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>
    </dependencies>

2.2 spring配置文件:

<?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:mvc="http://www.springframework.org/schema/mvc" 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/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--springmvc的配置-->
    <!--包扫描 扫描com.ykq以及该包下的子包-->
    <context:component-scan base-package="com.xw"/>



    <!--spring整合mybatis的配置-->

    <!--数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <!--mysql驱动为8.0以后必须使用时区-->
        <property name="url" value="jdbc:mysql://localhost:3306/aaasql?serverTimezone=Asia/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <!--spring封装了一个类SqlSessionFactoryBean类,可以把mybatis中的配置-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:/mapper/*.xml"/>
    </bean>

    <!--为指定dao包下的接口生产代理实现类-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
        <!--它会为com.ykq.dao包下的所有接口生产代理实现类-->
        <property name="basePackage" value="com.xw.dao"/>
    </bean>

<!--    &#45;&#45;================以下内容是关于事务的配置===================&#45;&#45;&#45;&#45;-->
    <!--事务切面管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--开启事务管理注解的驱动-->
    <tx:annotation-driven/>
</beans>

2.3 创建dao层:

public interface StudentDao {
   int Thansfer(@Param("id") int id, @Param("money") double money);
}

2.4 创建mapper映射文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace必须和dao接口的名称一模一样-->
<mapper namespace="com.xw.dao.StudentDao">

    <update id="Thansfer">
        update  tbl_student set money=money+#{money} where id=#{id}
    </update>
</mapper>

2.5 创建service接口与实现类:

2.5.1 接口:

public interface Studentim {
    int zhuangzhang(int id,int uid,double money);
}

2.5.2 实现类:

@Service
public class StudentimService implements Studentim {
    @Autowired
    private StudentDao studentDao;

    @Transactional //spring操作事务
    @Override
    public int zhuangzhang(int id, int uid, double money) {
        studentDao.Thansfer(id,-money);
        int c=10/0; //故意让他报错,以便演示
        studentDao.Thansfer(uid,money);
        return 0;
    }
}

2.6 创建测试类:这里不在用接口测试

public class test {
    public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("classpath:spring.xml");
        Studentim userServieImpl = (Studentim) app.getBean("studentimService");
        userServieImpl.zhuangzhang(4,5,100);
    }
}

2.7 测试运行:

2.7.1 无异常测试:

2.7.2 异常测试:

当异常出现,异常前与异常后金额并无变化,证明事务已启用成功


 以上便是javaSpring操作事务中的部分内容,如有漏缺请在下方留言告知,我会及时补充

标签:事务,javaSpring,int,spring,org,public,money,操作,id
From: https://www.cnblogs.com/9--1/p/17636871.html

相关文章

  • Redis 实现库存扣减操作
    在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。解决方案使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。还是使用数据库,但是将库存分层多份存到多条记录里面,扣减库存的时候路由一下,这样子增大了并发量,但是还......
  • Linux 操作必备 150 个命令,速度收藏~
    nux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。Linux命令功能说明线上查询及帮助命令(2个)man查看命令帮助,命令的词典,更复杂的......
  • MySQL事务
    ACID原子性(Atomicity)隔离性(Isolation)一致性(consistency)持久性(Durability)当把现实世界的状态转换映射到数据库世界时,持久性意味着该转换对应的数据库操作所修改的数据都应该在磁盘上保留下来,不论之后发生了什么事故,本次转换造成的影响都不应该被丢失掉事务​是一个......
  • 聊一下操作系统 macOS 与 Linux
    对于Windows操作系统大家都比较熟悉,也常拿它与Linux操作系统进行比较,两者之间的差异也很明显。但对于macOS和Linux的比较不太多,很多人认为它们很相似,因为这两种操作系统都可以运行Unix命令。其实详细比较下,两者还是有很多不同点的,每种操作系统都是独一无二的存在,下面就让我们......
  • 聊一下操作系统-macOS-与-Linux
    聊一下操作系统macOS与Linux对于Windows操作系统大家都比较熟悉,也常拿它与Linux操作系统进行比较,两者之间的差异也很明显。但对于macOS和Linux的比较不太多,很多人认为它们很相似,因为这两种操作系统都可以运行Unix命令。其实详细比较下,两者还是有很多不同点的,每种操作系统都......
  • java Sping aop 以及Spring aop 的应用事务管理
    1.回顾线程死锁概念和如何避免死锁的发生:线程的通信waitnotify()notify():---Object类线程的状态:NEW--->start()--->就绪状态---CPU时间片---运行状态RUNNABLE]--->sleep()--->TIMED_WAITING--->wait()---->WAITING----sysn---Blocked---->终止状态[T]线程池:常见......
  • mysql-综合案例,练习数据表查询操作
    1.环境搭建创建数据库test1createdatabaseifnotexiststest1; 选择test1数据库创建两张表dept(部门表)和employee(员工表)createtableifnotexistsdept(d_nointprimarykeyauto_incrementcomment"部门编号(自增长主键)",d_namevarchar(10)comment"部......
  • 【转载】JUC常见面试题:Java线程和操作系统线程有什么区别
    【转载】JUC常见面试题:Java线程和操作系统线程有什么区别整理来自于:https://cloud.tencent.com/developer/article/18181511操作系统的用户态和核心态在操作系统中,内存通常会被分成用户空间(Userspace)与内核空间(Kernelspace)这两个部分。当进程/线程运行在用户空间时就处于用......
  • javaSpring之AOP
    1.什么是AOP翻译中文为:面向切面编程,可以让你在业务代码与非业务代码隔离,增加新的非业务代码2.AOP使用场景1.我一直遵循着存在即合理的观念,在各大需求中,有一种需求是每当操作时,就会在数据库记录日志,那么在不更改业务代码的情况下应该怎么做,没错,AOP可以解决2.当然,其也可以做权限......
  • 操作系统学习01
    UNIX系统简介:1970年于美国的贝尔实验室,作者肯·汤普逊和丹尼斯·里奇UNIX是最早的多用户、多任务、支持多种CPU架构。高稳定性、高可靠性、高安全性既能构建大型关键型业务系统的服务器(银行、电信公司等),也能支持移动嵌入式设备Minix是一种开源的基于微内核架构的类UNIX计算机......