获取插入数据自动生成的id的值的三种方法

场景:当我们添加一个检查组,并且我们需要给这个检查组中添加多个检测项,我们应该先创建检查组,然后根据检查组的ID和检查项的id 将俩者关系添加到第三个表中,但是我们所插入的检查组的ID值是数据库自动生成的,我们怎么才能在插入数据后获取当前插入数据的ID呢?

9.1 方法一:使用mybaits的 <selectKey>标签

     <!--新增-->
     <insert id="add" parameterType="com.tk.domain.CheckGroup">
         <!--
             selectKey 可以查询出当前插入数据自动生成的id 值,并赋值给传入给对象的 id
             resultType : 主键ID 的类型
             order : 该代码是在下面代码之前执行还是之后执行
                     如果设置 After : 先执行插入语句,然后在selectKey 元素
             keyProperty : 对象中的属性
         -->
         <selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
             SELECT LAST_INSERT_ID()
         </selectKey>
         insert into t_checkgroup(code,name,sex,helpCode,remark,attention)
          values (#{code},#{name},#{sex},#{helpCode},#{remark},#{attention})
     </insert>

ServiceImpl

     /**
      * 增加一条检查组数据
      * @param checkGroup
      * @return
      */
     @Override
     public int add(CheckGroup checkGroup,Integer[] checkitemIds) {
         int result = checkGroupDao.add(checkGroup);
         // 获取数据库自动生成主键 ID 的值
         Integer checkGroupId = checkGroup.getId();
 ​
         Map<String,Integer> map = new HashMap<>();
         // 添加检查组和检测项的依赖关系
         if(checkitemIds != null && checkitemIds.length > 0){
             for (Integer checkitemId : checkitemIds) {
                 map.put("checkItemId",checkitemId);
                 map.put("checkGroupId",checkGroupId);
                 checkGroupDao.addCheckGroupIdAndCheckItemId(map);
             }
         }
         return result;
     }

 

9.2 方法二: 使用mybaits的 insert 标签的 useGeneratedKeys 和 keyProperty 属性

   
    <!--新增-->
     <!-- useGeneratedKeys 和 keyProperties 和上面的含义相同 -->
     <insert id="add" parameterType="com.tk.domain.CheckGroup" useGeneratedKeys="true" keyProperty="id">
         insert into t_checkgroup(code,name,sex,helpCode,remark,attention)
          values (#{code},#{name},#{sex},#{helpCode},#{remark},#{attention})
     </insert>

 

9.3 方法三: 使用mybatis-plus 的的 insert 方法

mybatis -plus 会默认的把自动生成的主键封装到我们传入的实体对象中

     @Override
     public int add(CheckGroup checkGroup,Integer[] checkitemIds) {
        /* 
         原始xml方法
         int result = checkGroupDao.add(checkGroup);
         */
         // mybatis-plus 中的insert 方法
         int count = checkGroupDao.insert(checkGroup);
         // 获取数据库自动生成主键 ID 的值
         Integer checkGroupId = checkGroup.getId();
         System.out.println(checkGroup.getId());
 ​
         Map<String,Integer> map = new HashMap<>();
         // 添加检查组和检测项的依赖关系
         if(checkitemIds != null && checkitemIds.length > 0){
             for (Integer checkitemId : checkitemIds) {
                 map.put("checkItemId",checkitemId);
                 map.put("checkGroupId",checkGroupId);
                 checkGroupDao.addCheckGroupIdAndCheckItemId(map);
             }
         }
         return count;
     }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值