一、事务回忆
- 要么都成功,要么都失败。
- 在项目开发中非常重要,涉及到数据的一致性。
- 确保数据的完整性和一致性。
事务的ACID原则:
- 原子性
- 一致性
- 隔离性:多个业务可能操作同一数据,需要防止数据损坏
- 持久性:事务一旦提交,无论发生什么问题,结果不会被影响
mapper👇
- 故意写错delete语句,测试事务
<?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.spring.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">
deletes from mybatis.user where id = #{id};
</delete>
</mapper>
- 调用语句👇
public List<User> selectUser() {
User user = new User(2,"ls","456");
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
mapper.addUser(user);
//由于这一步sql语句写错,肯定会报错,但是上一步的添加已经实现
mapper.deleteUser(2);
return mapper.selectUser();
}
-
提示语句错误!但是数据库中的第一步增加已经加入,这不是我们想要的。
-
接下来添加事务,实现要么全成功,要么全失败。
二、spring中的事务大概分两类
1、声明式事务(AOP横切,不影响源代码)
- spring事务导包(新版的JDBC可能自带)
<dependency>
<groupId>org.aspectj</groupId>