springboot 在controller中添加事务

时间:2025-03-12 09:48:21

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

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

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