<insert id="addBatch">insert into action_group(pl_id, name, create_uid, `desc`)values<foreach collection="actionGroupList" item="actionGroup" separator=",">(<choose><when test="actionGroup.platformInfo!=null">#{actionGroup.platformInfo.plId}</when><otherwise>null</otherwise></choose>,#{actionGroup.name},<choose><when test="actionGroup.createUser!=null">#{actionGroup.createUser.userId}</when><otherwise>null</otherwise></choose>,#{actionGroup.desc})</foreach></insert>
第一步:
在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名!
- <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="id" parameterType="com.bookmanager.model.LeaveMessage">
- insert into leave_message_tbl (content, createdate,
- userid)
- values (#{content,jdbcType=VARCHAR}, #{createdate,jdbcType=DATE},
- #{userid,jdbcType=INTEGER})
- </insert>
useGeneratedKeys: 要求数据库本身具备主键自动增长的功能,比如说,mysql,sqlserver可以使用useGeneratedKeys =true 这功能,不支持主键自动增长的数据库是不能使用useGeneratedKeys =true的;
keyProperty:一定得和java对象的属性名称一直,而不是表格的字段名
第二步:
void insertAndGetId(LeaveMessage record);
返回值为int,mybatis会判断为返回插入成功的条数所以会一直返回为1
此时获取id可以通过在mapper中 '对象'.getId()获得id值,当初困扰了好久,原来自动赋进去了
第三步:
- @RequestMapping("/save")
- @ResponseBody
- public ResultDTO save(@RequestBody LeaveMessage leaveMessage){
- ResultDTO dto = ResultDTO.getIntance();
- dto.message = "留言失败,请重新提交";
- dto.type = "error";
- try {
- /*leaveMessageService.save(leaveMessage);*/
- leaveMessageService.insertAndGetId(leaveMessage);
- System.out.println(leaveMessage.getId());
- dto.message = "恭喜你,留言成功";
- dto.type = "success";
- } catch (Exception e) {
- e.printStackTrace();
- }
- return dto;
- }
结果:
本文详细介绍了如何在Mybatis中通过设置useGeneratedKeys和keyProperty来实现自动为新插入的数据生成主键ID,并展示了从Mapper到Service再到Controller的完整流程。包括在MybatisMapper中配置useGeneratedKeys和keyProperty,使用insertAndGetId方法进行插入操作并获取新生成的ID,以及在Controller中调用Service方法完成整个操作流程。
590

被折叠的 条评论
为什么被折叠?



