SpringBoot Mybatis开启事务

SpringBoot开启事务非常的简单,只需要一个注解@Transactional 就可以,因为默认已经对jpa、mybatis、jdbc开启了事务。

上一篇讲解了SpringBoot整合Mybatis,就在上篇的基础上做讲解。

(1)准备

有一个wzj数据库,teacher数据库表,表里面有一行数据。


(2)定义数据访问接口

该接口通过tec_id来更新tec_age。

    /**
     * 修改信息
     * @param id id
     * @param age 修改的年龄          
     */
    void modifyAge(@Param("id") String id,@Param("age")Integer age);

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" >
<mapper namespace="com.wzj.demo.mapper.TeacherMapper">
    <resultMap id="BaseResultMap" type="com.wzj.demo.entity.TeacherBean">
        <result column="tec_id" property="tecId" jdbcType="VARCHAR"/>
        <result column="tec_name" property="tecName" jdbcType="VARCHAR"/>
        <result column="tec_age" property="tecAge" jdbcType="INTEGER"/>
    </resultMap>

    <sql id="Base_Column_List">
        tec_id, tec_name, tec_age
    </sql>
    

    <update id="modifyAge">
        UPDATE
         teacher
        set
          tec_age = #{age}
        WHERE
          tec_id = #{id}
    </update>
</mapper>

(3)Service层

/**
 * 修改年龄,将id为1001的老师信息修改为22岁,再修改为30
 */
@Transactional
public void modifyAge()
{
    teacherMapper.modifyAge("1001",22);

    int i = 4 / 0;

    teacherMapper.modifyAge("1001",30);
}

(4)测试

发现程序抛出异常,数据库的信息id为1001的老师的age还是20。

是由于@Transactional声明事务,虽然第一次成功修改年龄为22,但是4/0抛出了异常,数据又回滚到原来20,。

Github源码下载https://github.com/HelloKittyNII/SpringBoot/tree/master/SpringBootDemo


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dmfrm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值