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
作者:dmfrm
来源链接:https://blog.csdn.net/u010889616/article/details/79661732