MyBatis-Plus 持久层
导航
返回软件工程分类
MyBatis-Plus是Java后端开发对数据库进行操作的工具,这里是MyBatis-Plus的官方文档,同时这里还有哔哩哔哩的视频可以学习。
主要内容可以根据这两个网址进行学习,以下是对MyBatis-Plus的补充内容。
事务管理
简介
事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
使用Spring声明式事务时,可以在@Configuration类上加@EnableTransactionManagement。Spring Boot在满足自动配置条件时通常已启用事务管理,不一定需要重复添加。下面保留旧版MyBatis-Plus配置;3.4.0起应使用MybatisPlusInterceptor配合OptimisticLockerInnerInterceptor、PaginationInnerInterceptor,见官方插件文档。
1 | /** |
在Spring管理的service方法上加@Transactional声明事务,还需要可用的事务管理器。默认代理模式下,同一个对象内部的自调用不会经过事务代理,不能只加注解就认为事务一定生效。
info
@Transactional默认对RuntimeException和Error回滚,对受检异常通常不回滚。Spring不会把所有异常都改写为RuntimeException;需要对受检异常回滚时,可显式使用@Transactional(rollbackFor = Exception.class)。自定义或全局回滚规则也会影响结果,见Spring事务文档。如果在事务方法内部吞掉异常,事务拦截器通常无法据此触发回滚;如果事务已被内部参与者标记为rollback-only,捕获异常也不会让它恢复可提交。
1 |
|
当我们需要在事务控制的service层类中使用try catch去捕获异常后,就会使事务控制失效,因为该类的异常并没有抛出,就不是触发事务管理机制。怎样才能即使用try catch去捕获异常,而又让出现异常后Spring回滚呢,这里就要用到TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
1 | //假设这是一个service类的片段 |