zoukankan      html  css  js  c++  java
  • SpringBoot+mybatis使用@Transactional无效

    项目中新增过程中如果出现异常需要回滚, 在service实现方法中使用@Transactional注解失效

    解决:

    1, 在controller中使用try{}catch捕捉异常

    2, 在service实现中使用@Transactional注解

    controller

       @RequestMapping(value = "/add",method = RequestMethod.POST)
        @ResponseBody
        public Result add(HttpServletRequest request, @RequestBody User user){
            Result result = new Result();
            try{
                result = service.insert(user);
            }catch (Exception e){
                logger.error("失败", e);
            }
            return result;
        }

    service: 

    @Transactional(rollbackFor = Exception.class) 设置出现什么异常回滚, 默认情况下,spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚

    java里面将派生于Error或者RuntimeException(比如空指针,1/0)的异常称为unchecked异常,
    其他继承自java.lang.Exception得异常统称为Checked Exception,如IOException、TimeoutException等
       @Override
        @Transactional(rollbackFor = Exception.class)
        public Result insert(User user){
            Result result = new Result();int result = userMapper.insert(user);return result;
        }

    总结: 异常捕获在Controller去做,这样在Service层中 @Transactional在发生异常时可以正常进行回滚操作。

    参考:  https://blog.csdn.net/flyaway86/article/details/81181346

  • 相关阅读:
    vue3配置rem适配
    webPack转vite2
    vite ant Design vue按需加载
    Vue3 +Vite+ts
    vite 2.0 动态引入加载图片
    Vue3使用vmdeditor自定义锚点
    ThinkPHP6 路由
    DIV+CSS 文本属性
    DIV+CSS 入门篇 CSS选择器
    如何不使用react,也能解析jsx?
  • 原文地址:https://www.cnblogs.com/gczmn/p/10405100.html
Copyright © 2011-2022 走看看