引入事务执行回滚:
@Transactional(propagation = Propagation.REQUIRED)
@Transactional(propagation = Propagation.REQUIRED) 删除、增加、修改 使用当前事务
@Transactional(propagation = Propagation.SUPPORTS) // 查询的时候使用
为什么用到事务?
因为在我们实际开发项目中,当新增了一条数据后,往下执行的时候 报错了,后面的代码不执行了,这个时候如果加入了事务,事务会自动回滚,将新增的数据回滚掉!
@Transactional(propagation = Propagation.REQUIRED) 删除、增加、修改 使用当前事务
@Transactional(propagation = Propagation.SUPPORTS) // 查询的时候使用
为什么用到事务?
因为在我们实际开发项目中,当新增了一条数据后,往下执行的时候 报错了,后面的代码不执行了,这个时候如果加入了事务,事务会自动回滚,将新增的数据回滚掉!
增删改用
查询用
使用事务 REQUIRED
SpringBoot整合持久层事物
1、事物的隔离级别有多种,这里采用默认的形式。
2、事物的传播行为,这里主要使用REQUIRED和SUPPORTS。
REQUIRED:当有一个操作需要执行的时候,如果有事物,就会把当前这个操作放入到事物中,如果没有事物,那么就要新建一个事物,然后再去执行(适用于增加、删除、修改的操作)。
SUPPORTS:如果有事物,就把该操作加入当前事物中执行,如果没有事物,就以脱离事物状态去运行(适合读取操作)。

举例:插入一个用户,之后产生一个除0异常,如图。然后把该用户的删除状态由0修改为1,然后再进行修改。
通过查看:用户是插入进去了,但是没有进行修改,由于这个异常,所以这里需要回滚,所以这里需要使用事物。

这里只需要在执行数据库操作的方法上添加注解@Transactional,并且事物的传播行为REQUIRED,此时就会发现没有进行插入,也就是事物进行了回滚,这也就是事物的作用,要么一组操作全部成功,要不就都失败。

拓展:SpringMVC事物的使用,需要在配置文件进行配置,如下图,针对特定方法的开头单词进行事物的操作。

@Transactional(propagation=Propagation.SUPPORTS)查询
@Transactional(propagation=Propagation.REQUIRED)增加,删除,修改
事务隔离级别:
DEFAULT
READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE_READ
SERIALIZABLE
事务的传播行为:
REQUIRED:如果有事务,加入当前事务;如果没有事务,创建新事务,适合数据的增加,删除操作。
SUPPORTS:如果有事务,加入当前事务;如果没有事务,不会创建新事务,可以脱离事务独立运行;适合数据的读取操作。
MANDATORY
REQUIRES_NEW
NOT_SUPPORTED
NEVER
NESTED
需要了解Mysql的事务隔离级别和传播行为
SpringMVC的配置方式是这样的
配置传播行为propagation的方法
SpringMVC 的事务传播行为的配置
引入对事务回滚的支持
使用@Transaction标签进行声明
设置属性propagation的值,指定事物的传播行为,一般增加、删除,修改使用REQUIRED,必须在事务中执行,而查询可以使用SUPPORTS
SpringMvc使用的事务配置
增加删除,修改,使用REQUIRED
查询使用SUPPORTS
springboot整合事务
springboot 整合持久层事务
supports适用于读取操作,required适用于增加、删除、修改操作
REQUIRED :没事物创建事物,有事物和并到那个事物 --》适合增删改
SUPPORTS :没有事物就不用事物,有实物就合并事物 —》适合查
mysql 默认的是可重复读,就是可能会造成幻读
1、增删改
@Transactional(propagation=Propagation.REQUIRED
2、查
@Transactional(propagation=Propagation.SUPPORTS
事务的关键字,增加、删除、
修改都用REQUIRED,只有查询用SUPPORTS
springMVC事务的配置
添加事务
SpringBoot整合持久层事务
事务
事务
增删改 用REQUIRED 查询采用Support
事务的配置