获取插入数据自动生成的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;
     }
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号