mybatisplus执行insert和update都会有什么异常,我如果用translation注解来控制事务,需要怎么框定异常类型触发回滚操作
  39foGL4G2uIg 2023年11月05日 27 0

Mybatis-Plus 在执行插入和更新操作时,可能会抛出以下异常:

  1. org.apache.ibatis.exceptions.PersistenceException:这是 Mybatis 的基础异常,表示数据库访问过程中发生了错误。
  2. com.baomidou.mybatisplus.core.exceptions.MybatisPlusException:这是 Mybatis-Plus 的异常类,通常是由于 Mybatis-Plus 配置不当或使用方式不正确而引起。
  3. java.sql.SQLException:这是 JDBC 的异常类,通常是由于数据库连接、SQL 语句等方面的问题引起。

如果你想使用 @Transactional 注解来控制事务,则可以使用 propagationrollbackFor 属性来指定事务传播行为和触发回滚的异常类型。

例如,假设你需要在一个 Service 方法中执行多个数据库操作,并要求这些操作都成功才进行提交,否则回滚事务。同时,你希望捕获 Mybatis-Plus 和 JDBC 异常并触发回滚操作,则可以按如下方式定义方法:

@Service
public class MyService {

    @Autowired
    private MyMapper myMapper;

    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = {MybatisPlusException.class, SQLException.class})
    public void myMethod() {
        try {
            // 执行多个数据库操作
            myMapper.insert(entity1);
            myMapper.updateById(entity2);
            // ...
        } catch (Exception e) {
            // 捕获异常并打印日志
            log.error("数据库操作失败", e);
            throw e;
        }
    }

}

在上面的代码中,使用 @Transactional 注解来声明事务,指定了传播行为为 Propagation.REQUIRED(默认值),表示如果当前没有事务,则开启一个新事务;如果已经存在事务,则加入该事务。

同时,rollbackFor 属性指定了触发回滚操作的异常类型列表,包括 MybatisPlusExceptionSQLException 两种类型。其中,MybatisPlusException 表示 Mybatis-Plus 的异常类,SQLException 表示 JDBC 的异常类,这样就可以捕获并处理这两种异常并触发回滚操作。

需要注意的是,@Transactional 注解只对公共方法有效,即只有从外部调用该类的公共方法时才能触发事务管理。如果在同一个类中的内部方法调用不会触发事务管理,需要将内部方法提取到另一个类中,或者通过自我调用的方式显式开启一个新的事务。

希望这些信息能够解决你的问题,如果还有其他问题,请随时提出。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

39foGL4G2uIg