springboot 在controller中添加事务

在开发过程中,碰到了一个问题,一个接口中需要插入三条数据,需要保证三条数据全部成功或者三条数据全部失败,由于使用的是MytbatisPlus,所以没有考虑在service层进行处理,通过网上找资料,找到了如下解决办法:
实体类:

@Data
@TableName(value = "student")
@KeySequence(value = "seq_student", clazz = Integer.class)
public class Student implements Serializable {

    @TableId(value = "id", type = IdType.INPUT)
    private Integer id;
    private String nam;
    private String cla;

}
mapper层、service层、serviceImpl层都是继承了mybatisPlus的公共类,这里就不详细介绍了,我其他博客里有这些类的写法,下面直接上controller层:
@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudentService studentService;

//添加事务第一步 引入platformTransactionManager对象
    @Autowired
    private PlatformTransactionManager platformTransactionManager;

    @RequestMapping(value = "/insert" , method = RequestMethod.POST)
    public Object insert(@RequestBody Map<String,Object> map){
    //第二步 不太理解都是什么方法 但是需要添加到方法中
        DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
        definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
        TransactionStatus status = platformTransactionManager.getTransaction(definition);
        //第三步 加入try catch语句块
        try{
            String nam = map.get("nam").toString();
            String cla = map.get("cla").toString();
            Student s = new Student();
            s.setNam(nam);
            s.setCla(cla);
            //第一次调用保存
            studentService.insert(s);
            s.setNam("会当凌绝顶一览众山小写代码真开心");
            s.setCla("故意");
            //第二次手动加入错误数据 因为数据库中该字段最多可输入五个字符 当前nam值过大 会导致插入报错
            studentService.insert(s);
            //
            platformTransactionManager.commit(status);
            return "添加成功";
        }catch (Exception e){
        //第二次插入报错后会被try catch捕获,捕获后执行rollback操作,第一条数据回滚
            platformTransactionManager.rollback(status);
        }
        return "添加失败";
    }
}
并不是太理解代码的原理,但是这样做实现了需求,找机会在深入研究。如果哪里写的
(0)

相关推荐