当前位置: 首页 > 后端技术 > Java

Spring事务

时间:2023-04-01 17:37:27 Java

Spring事务特性ACID:原子性、一致性、隔离性、持久性。事务是不可分割的操作,其中进程要么全部成功,要么全部失败。一旦完成,将统一提交,以确保一致性。不同事务处理统一数据隔离,防止数据损坏。交易结果将永久保存。分类Programmatictransactions将事务管理代码嵌入到业务方法中,控制事务的提交和回滚缺点:每个事务操作业务逻辑中必须包含额外的事务管理代码Declarativetransactions将事务管理代码从业务方法中分离出来,以声明的方式实现事务管理.将事务管理作为一个横切关注点,通过AOP的方式进行模块化。编程式事务publicclassUserMapperImpl1extendsSqlSessionDaoSupportimplementsUserMapper{privatefinalPlatformTransactionManagertransactionManager;publicUserMapperImpl1(PlatformTransactionManagertransactionManager){this.transactionManager=transactionManager;}@OverridepublicListselectUser(){returngetSqlSession().getMapper(UserMapper.class).selectUser();}@OverridepublicintaddUser(Useruser){inta=0;TransactionStatustxStatus=transactionManager.getTransaction(newDefaultTransactionDefinition());尝试{getSqlSession().getMapper(UserMapper.class).addUser(user);getSqlSession().getMapper(UserMapper.class).deleteUser(10);}catch(Exceptione){transactionManager.rollback(txStatus);扔e;}返回一个;}/*此处和上记一致//TransactionTemplatetransactionTemplate=newTransactionTemplate(transactionManager);//a=transactionTemplate.execute(txStatus->{//getSqlSession().getMapper(UserMapper.class).addUser(user);//getSqlSession().getMapper(UserMapper.class).deleteUser(10);//返回null;//});@OverridepublicintdeleteUser(Integerid){returngetSqlSession().getMapper(UserMapper.class).deleteUser(id);}}声明式事务常用的传播方式有两种:propagation_requierd:如果当前没有事务,则创建一个新事务,如果已经有事务,则加入这个事务,这是最常用的选项propagation_nested:如果有当前事务,在嵌套事务中执行它。如果当前没有事务,执行类似propagation_required的操作。XML配置:<属性rtyname="url"value="jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>JAVA类:publicclassUserMapperImplextendsSqlSessionDaoSupportimplementsUserMapper{@OverridepublicListselectUser(){inta1=getSqlSession().getMapper(UserMapper.class).addUser(newUser(12),"wxn1"));返回getSqlSession().getMapper(UserMapper.class).selectUser();}@OverridepublicintaddUser(Useruser){System.out.println("新开始");inta=getSqlSession().getMapper(UserMapper.class).addUser(用户);System.out.println("添加结束");返回一个;}@OverridepublicintdeleteUser(@Param(value="id")Integerid){System.out.println("删除开始");inta1=getSqlSession().getMapper(UserMapper.class).addUser(newUser(12,"wxn1"));inta2=getSqlSession().getMapper(UserMapper.class).deleteUser(id);System.out.println("删除结束");返回a2;}}测试类:publicvoidselectUser(){ApplicationContextcontext=newClassPathXmlApplicationContext("beans.xml");UserMapperuserMapper=context.getBean("userMapper",UserMapper.class);//userMapper.addUser(newUser(8,"Lili1"));//userMapper.deleteUser(10);对于(用户用户:userMapper.selectUser()){System.out.println(用户);}}