深圳做营销网站公司哪家好,wordpress 2017,电脑平面设计培训班多少钱,清远做网站1. 事务
1.1 事务的 ACID 原则 数据库事务#xff08;transaction#xff09;是访问并可能操作各种数据项的一个数据库操作序列。事务必须满足 ACID 原则——即原子性#xff08;Atomicity#xff09;、一致性#xff08;Consistency#xff09;、隔离性#xff08;Iso…1. 事务
1.1 事务的 ACID 原则 数据库事务transaction是访问并可能操作各种数据项的一个数据库操作序列。事务必须满足 ACID 原则——即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability。 原子性指事务是数据库工作的最小单位一个事务中的所有操作要么全部成功提交要么全部失败回滚。一致性指事务操作不能破坏数据的一致性数据库在一个事务的执行前后都应处于一致性状态。隔离性指数据库并发情况下并发的事务直接是隔离的一个事务的执行不能被其他事务影响。持久性指一旦事务提交则其对数据的变更就是永久性的即使数据库发生任何故障都不应该对数据造成任何影响。 以下业务中虽然执行了添加和删除用户的两个操作但因为删除操作的失败导致数据库中的数据与我们原本期望的不一致因此违反了 ACID 原则Spring 中有对事务的相关配置来避免此种情况的发生。 业务代码 User.java Data
AllArgsConstructor
NoArgsConstructor
public class User {private int id;private String name;private String pw;
}UserMapper.java public interface UserMapper {public ListUser selectUser();public int addUser(User user);public int deleteUser(int id);
}UserMapper.xml ?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.why.mapper.UserMapperinsert idaddUser parameterTypecom.why.pojo.Userinsert into user (id, name, pw) values (#{id}, #{name}, #{pw});/insert!--这里将删除语句故意写错--delete iddeleteUser parameterTypeintdeletes from user where id #{id};/delete/mapperUserMapperImpl.java public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {public ListUser selectUser() {UserMapper mapper getSqlSession().getMapper(UserMapper.class);User user new User(5, 李四, 555555);mapper.addUser(user);mapper.deleteUser(5);ListUser users mapper.selectUser();return users;}public int addUser(User user) {int i getSqlSession().getMapper(UserMapper.class).addUser(user);return i;}public int deleteUser(int id) {int i getSqlSession().getMapper(UserMapper.class).deleteUser(5);return i;}
}MyTest.xml Testpublic void testProblem() {ApplicationContext context new ClassPathXmlApplicationContext(applicationContext.xml);UserMapper userMapper context.getBean(userMapper, UserMapper.class);ListUser users userMapper.selectUser();for (User user : users) {System.out.println(user);}}执行结果 控制台报删除语句的错误 数据库执行了添加没有删除导致数据不一致问题
13.1 Spring 事务管理 声明式事务AOP 的应用不影响业务代码。 在 Spring 的配置文件中创建一个 DataSourceTransactionManager 对象 bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManager!--constructor-arg refdataSource /--property namedataSource refdataSource/
/bean结合 AOP 实现事务的织入 !--配置事务的类--
tx:advice idtxAdvice transaction-managertransactionManager!--给哪些方法配置事务--!--配置事务的传播特性--tx:attributestx:method nameadd propagationREQUIRED/tx:method namedelete propagationREQUIRED/tx:method nameupdate propagationREQUIRED/tx:method namequery read-onlytrue/tx:method name* propagationREQUIRED//tx:attributes
/tx:advice!--配置事务切入--aop:configaop:pointcut idtxPointcut expressionexecution(* com.why.mapper.*.*(..))/aop:advisor advice-reftxAdvice pointcut-reftxPointcut//aop:config控制台报错 数据库数据保持了一致性 编程式事务在代码中进行事务的管理。