spring学习17:声明式事务
-
回顾事务:
-
要么都成功,要么都失败;
-
事务在项目开发中十分重要,涉及到数据的一致性问题!
-
-
事务的ACID原则:
-
原子性;
-
一致性;
-
隔离性:多个业务可能操作同一个资源,是互相隔离的,防止数据损坏;
-
持久性:事务一旦被提交,无论系统发生什么问题,结果都不会被影响;
-
-
Spring整合Mybatis:模拟事务市场场景
-
编写pojo实体类
-
编写mapper接口
-
编写mapper.xml配置文件
-
编写mapper接口的实现类(为了整合Spring,创建SQLSession)
-
编写mybatis-config.xml配置文件
-
编写spring-dao.xml(Spring整合Mybatis,注册数据源,SqlSessionFactory,SqlSessionTemplate)
-
编写applicationContext.xml(导入spring-dao.xml, 注册bean)
-
测试
-
-
Spring中的事务管理:
-
声明式事务:AOP【推荐】
-
编程式事务:需要在代码中进行事务的管理;
-
Spring中propagation的7种事务配置;
-
propagation=REQUIRED【Spring的默认配置】
-
-
-
总结:
-
为什么需要事务:如果不配置事务,可能存在数据提交不一致的情况下;
-
如果我们不在Spring中去配置声明式事务,我们就需要在代码中手动配置事务;
-
事务在项目开发中十分重要,涉及到数据的一致性问题!
-
-
代码案例:pojo
public class User {
private int id;
private String name;
private String pwd;
} -
代码案例:Mapper
public interface UserMapper {
List<User> selectUser();
//添加一个用户
int addUser(User user);
//删除一个用户
int deleteUser(User user);
} -
代码案例:Mapper.xml
-
代码案例:MapperImpl
//为了整合Spring,创建SQLSession
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
public List<User> selectUser() {
User user = new User(8, "demo008", "888888");
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
//一组数据
mapper.addUser(user);
mapper.deleteUser(user);
return mapper.selectUser();
}
public int addUser(User user) {
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
return mapper.addUser(user);
}
public int deleteUser(User user) {
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
return mapper.deleteUser(user);
}
} -
代码案例:Spring配置声明式事务