在主键是自增的情况下,我使用了如下格式的插入语句,以求在插入数据之后能获得自增的主键。
<insert id = "insert" useGeneratedKeys = "true" keyProperty = "id">
SQL语句
</insert>
但是,当我进行测试的时候,我发现结果并不是那么让我满意。我的代码如下,但是当我在Service层输出course.getCourseId()的时候,我发现输出的是null,而当我在Controller层进行输出course.getCourseId()的时候,他才能输出相应的自增主键。这个问题对我来说是致命,因为我希望把我的业务逻辑放在service层,从而使得第二个表的插入出现异常的时候能进行事务回滚。但是,这个问题的出现使得我不得不将对两个表的插入放在controller层,从而导致当第二个表插入异常的时候,无法通过事务回滚来保证一致性。
@Service
public class CourseService {
@Autowired
CourseMapper courseMapper;
@Autowired
TeachesMapper teachesMapper;
//创建课程
public void createCourse(Course course,Integer teacherId) {
//Course course=new Course(null,courseName,courseDes);
courseMapper.insertSelective(course);
System.out.println("course.getCourseId()=="+course.getCourseId());
//Teaches teaches=new Teaches(course.getCourseId(),teacherId);
//teachesMapper.insertSelective(teaches);
}
}
//创建课程
@ResponseBody
@RequestMapping(value = "/course", method = RequestMethod.POST)
public Msg createCourse(@RequestParam("courseName") String courseName,
@RequestParam("courseDes")String courseDes,@RequestParam("teacherId")int teacherId) {
try {
Course course=new Course(null,courseName,courseDes);
courseService.createCourse(course, teacherId);
System.out.println("course.getCourseId()=="+course.getCourseId());
} catch (Exception e) {
e.printStackTrace();
return Msg.fail();
}
return Msg.success();
}
这是相关的运行日志
只要把表主键设置为自增就可以实现,这里的设置只是返回主键的值。
给springboot中的操作函数加注解。
@Transactional
https://www.cnblogs.com/baiyifengyun/p/13837945.html
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632