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)