怎么在春天中对事务进行声明

  介绍

本篇文章给大家分享的是有关怎么在春天中对事务进行声明,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1,回顾事务

<李>

事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎!

<李>

事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性。

事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用。

事务四个属性酸

原子性(原子性)

事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用。

一致性(一致性)

一旦所有事务动作完成,事务就要被提交。数据和资源处于一种满足业务规则的一致性状态中。

隔离性(隔离)

可能多个事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。

持久性(耐久性)

事务一旦完成,无论系统发生什么错误,结果都不会受到影响。通常情况下,事务的结果被写到持久化存储器中。

模拟SQL执行异常

搭建一个基本的增删改查环境

编写一个usermap接口

public  interface  UserMapper  {   List<才能;User>, userList ();      int 才能插入(User 用户);      int 才能删除(Integer  id);   }

mapper文件的SQL我们故意写错

& lt; mapper 名称空间=癱om.jh.mapper.UserMapper"比;   & lt;才能select  id=皍serList", resultType=癱om.jh.domain.User"比;   ,,,select  *   ,,,,得到用户;   & lt;才能/select>      & lt;才能insert  id=癷nsert"比;   ,,,insert  into  mybatis.user  values  (# {id}, # {name}, # {pwd});   & lt;才能/insert>      & lt;才能delete  id=癲elete"比;   ,,,& lt; !——,删除语句故意写错,——比;   ,,,delete  where  id =, # {id}   & lt;才能/delete>   & lt;/mapper>

编写一个UserService的实现类,模拟执行错误

@ service   public  class  UserServiceImpl  implements  UserService  {   @ autowired才能   private 才能;UserMapper  usermap;      public 才能;void  setUserMapper (UserMapper  usermap), {   ,,,this.userMapper =, usermap;   ,,}      @Override才能   public 才能;void  CRUD (), {   ,,,List, userList =, userMapper.userList ();   ,,,userList.forEach (system . out:: println);   ,,,int  insert =, userMapper.insert (new 用户(5,“小王“,,“131212“));   ,,,System.out.println(插入);   ,,,int  delete =, userMapper.delete (5);   ,,,System.out.println(删除);   ,,}   }

测试

public  class  UserServiceImplTest  {   @Test才能   public 才能;void  CRUD (), {   ,,,ApplicationContext  context =, new  ClassPathXmlApplicationContext (“applicationContext.xml");   ,,,UserService  UserService =, context.getBean (“userServiceImpl",, UserService.class);   ,,,userService.CRUD ();   ,,}   }

测试结果分析

在上述测试中,先执行了查询全部用户方法,输出了结果

然后执行了新增操作,插入了一个用户用户

最后执行删除操作,出现异常,但是插入操作还是成功了

因为没有进行事务的管理,我们想让他们都成功才成功,有一个失败,就都失败,我们就应该需要事务!

以前我们都需要自己手动管理事务,十分麻烦!但是春天给我们提供了事务管理,我们只需要配置即可。

2,春天中的事务管理

春在不同的事务管理API之上定义了一个抽象层,使得开发人员不必了解底层的事务管理API就可以使用春天的事务管理机制.Spring支持编程式事务管理和声明式的事务管理。

编程式事务管理

<李>

将事务管理代码嵌到业务方法中来控制事务的提交和回滚

<李>

缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码

声明式事务管理

一般情况下比编程式事务好用。将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。将事务管理作为横切关注点,通过aop方法模块化.Spring中通过Spring aop框架支持声明式事务管理。

怎么在春天中对事务进行声明