铁锅炖大刀 2021-06-18 22:20 采纳率: 0%
浏览 13

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

这是相关的运行日志

 

  • 写回答

3条回答 默认 最新

  • 关注

    只要把表主键设置为自增就可以实现,这里的设置只是返回主键的值。

    评论

报告相同问题?

悬赏问题

  • ¥15 YOLOv8已有一个初步的检测模型,想利用这个模型对新的图片进行自动标注,生成labellmg可以识别的数据,再手动修改。如何操作?
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥20 bash代码推送不上去 git fetch origin master #失败了
  • ¥15 LOL外服加入了反作弊系统,现在游戏录像rofl文件离线都无法打开
  • ¥15 在centos7安装conda