关于MyBatis 插入数据返回主键的一点疑惑

关于MyBatis 插入数据返回主键的一个小坑

在主键是自增的情况下,我使用了如下格式的插入语句,以求在插入数据之后能获得自增的主键。

<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();
	}

如下便是相关的运行日志

image-20210618221825810

之后,我在某个帖子里边找到了解决方法。
帖子地址在这里
image-20210619105336456

解决方案就是:把执行器类型不要设置为BATCH就行
解决方案就是:把执行器类型不要设置为BATCH就行
解决方案就是:把执行器类型不要设置为BATCH就行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值