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 "添加失败";
    }
}
并不是太理解代码的原理,但是这样做实现了需求,找机会在深入研究。如果哪里写的不对,希望大神指正。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值