详解Spring整合mybatis--Spring中的事务管理(xml形式)

 更新时间:2023年11月24日 14:29:11   作者:Kbaor  
这篇文章主要介绍了Spring整合mybatis--Spring中的事务管理(xml形式),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

形式)

引入依赖

<properties>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <spring.version>5.3.20</spring.version>
        <mysql.version>8.0.31</mysql.version>
        <mybatis.version>3.5.4</mybatis.version>
        <mybatis.spring.version>1.3.2</mybatis.spring.version>
        <lombok.version>1.18.30</lombok.version>
        <commons-dbcp2.version>2.11.0</commons-dbcp2.version>
        <aspectjweaver.version>1.9.7</aspectjweaver.version>
    </properties>
    <dependencies>
        <!--spring基础依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--spring连接数据库-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--添加mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <!--mybatis与spring整合-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis.spring.version}</version>
        </dependency>
        <!--事务的依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <!--数据库连接池-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>${commons-dbcp2.version}</version>
        </dependency>
        <!--切面编程框架-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectjweaver.version}</version>
        </dependency>
    </dependencies>

引入事务的命名空间

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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">
</beans>

事务的相关配置

<!-- 事务管理数据源的配置-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--配置事务-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!--配置事务的属性
            1. name: 指定的哪些方式进行事务管理(这些方式指的事service中的方法)
                1.1 * 表示所有的方法都需要进行事务管理
                1.2 save* 表示save开头的方式需要进行事务管理
            2. propagation: 传播级别
                2.1 REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,就加入到这个事务中。这是最常见的选择。
            3. isolation: 隔离级别
        -->
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"/>
        </tx:attributes>
    </tx:advice>
    <!--使用AOP编程进行事务的配置-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.bboy.service.impl.*.*(..))"/>
    </aop:config>

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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 id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/qinmanage"/>
        <property name="username" value="root"/>
        <property name="password" value="127003"/>
     </bean>
    <!-- 事务管理数据源的配置-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--配置事务-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <!--配置事务的属性
            1. name: 指定的哪些方式进行事务管理(这些方式指的事service中的方法)
                1.1 * 表示所有的方法都需要进行事务管理
                1.2 save* 表示save开头的方式需要进行事务管理
            2. propagation: 传播级别
                2.1 REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,就加入到这个事务中。这是最常见的选择。
            3. isolation: 隔离级别
        -->
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"/>
        </tx:attributes>
    </tx:advice>
    <!--使用AOP编程进行事务的配置-->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.bboy.service.impl.*.*(..))"/>
    </aop:config>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="typeAliasesPackage" value="com.bboy.pojo"/>
        <property name="mapperLocations" value="mapper/*.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <bean id="accountMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="com.bboy.mapper.AccountMapper"/>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>
    <bean id="accountService" class="com.bboy.service.impl.AccountServiceImpl">
    <property name="accountMapper" ref="accountMapper"/>
    </bean>
</beans>

AccountMapper.xml

<?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">
<mapper  namespace="com.bboy.mapper.AccountMapper">
    <update id="updateId1">
        update t_account set money=money-${money} where id=${id}
    </update>
    <update id="updateId2">
        update t_account set money=money+${money} where id=${id}
    </update>
</mapper>

service

AccountService

package com.bboy.service;
public interface AccountService {
    public int pay(int id_1,int id_2,int money);
}

AccountServiceImpl

package com.bboy.service.impl;
import com.bboy.mapper.AccountMapper;
import com.bboy.service.AccountService;
/**
 * @类描述:
 * @作者:秦帅
 * @时间:2023/11/24 0024 10:48:11
 */
public class AccountServiceImpl implements AccountService {
    private AccountMapper accountMapper;
    public void setAccountMapper(AccountMapper accountMapper) {
        this.accountMapper = accountMapper;
    }
    @Override
    public int pay(int id_1, int id_2, int money) {
        //-:转出 id_1
        accountMapper.updateId1(id_1, money);
        //-停电了
        //  int res = 1/0 ;
        //-:转入 id_2
        accountMapper.updateId2(id_2, money);
        return 0;
    }
}

mapper-(AccountMapper)

package com.bboy.mapper;
import org.apache.ibatis.annotations.Param;
public interface AccountMapper {
    //- 转出
    public int updateId1(@Param("id") int id, @Param("money") int money);
    //- 转入
    public int updateId2(@Param("id") int id,@Param("money") int money);
}

pojo-(Account)

package com.bboy.pojo;
import lombok.Data;
@Data
/**
 * @类描述:
 * @作者:秦帅
 * @时间:2023/11/24 0024 10:45:51
 */
public class Account {
    private int id ;
    private String name ;
    private  int money ;
}

demo

package com.bboy.demo;
import com.bboy.service.AccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * @类描述:
 * @作者:秦帅
 * @时间:2023/11/24 0024 10:43:19
 */
public class Demo {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        AccountService accountService = (AccountService) context.getBean("accountService");
        accountService.pay(1,2,10000);
    }
}
 

到此这篇关于Spring整合mybatis--Spring中的事务管理(xml形式)的文章就介绍到这了,更多相关Spring整合mybatis--Spring事务管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java基础之不简单的数组

    Java基础之不简单的数组

    数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量
    2021-09-09
  • Java线程(Thread)四种停止方式代码实例

    Java线程(Thread)四种停止方式代码实例

    这篇文章主要介绍了Java线程(Thread)四种停止方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java 获取网络302重定向URL的方法

    Java 获取网络302重定向URL的方法

    在本篇文章里小编给大家整理的是关于Java 获取网络302重定向URL的方法以及相关知识点,有兴趣的朋友们参考下。
    2019-08-08
  • mybatis-plus乐观锁实现方式详解

    mybatis-plus乐观锁实现方式详解

    这篇文章主要介绍了mybatis-plus乐观锁实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Java 读取外部资源的方法详解及实例代码

    Java 读取外部资源的方法详解及实例代码

    这篇文章主要介绍了Java 读取外部资源的方法详解及实例代码的相关资料,经常有读取外部资源的要求,如配置文件等等需要读取,需要的朋友可以参考下
    2017-03-03
  • Java实现双链表的示例代码

    Java实现双链表的示例代码

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。本文将用Java语言实现双链表,需要的可以参考一下
    2022-09-09
  • 详解JUnit5参数化测试的几种方式

    详解JUnit5参数化测试的几种方式

    参数化测试一直是津津乐道的话题,我们都知道JMeter有四种参数化方式:用户自定义变量、用户参数、CSV文件、函数助手,那么JUnit5有哪些参数化测试的方式呢
    2021-07-07
  • 基于RocketMQ实现分布式事务的方法

    基于RocketMQ实现分布式事务的方法

    了保证系统数据的一致性,我们需要确保这些服务中的操作要么全部成功,要么全部失败,通过使用RocketMQ实现分布式事务,我们可以协调这些服务的操作,保证数据的一致性,这篇文章主要介绍了基于RocketMQ实现分布式事务,需要的朋友可以参考下
    2024-03-03
  • Java中的@interface注解使用详解

    Java中的@interface注解使用详解

    这篇文章主要介绍了Java中的@interface注解使用详解,注解@interface不是接口是注解类,在jdk1.5之后加入的功能,使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,需要的朋友可以参考下
    2023-12-12
  • Java从源码看异步任务计算FutureTask

    Java从源码看异步任务计算FutureTask

    这篇文章主要介绍了Java从源码看异步任务计算FutureTask,FutureTask就能够很好的帮助我们实现异步计算,并且可以实现同步获取异步任务的计算结果,具体是怎样实现的,下面我们就一起来学习下面文章的具体内容吧
    2022-04-04

最新评论