获取插入数据自动生成的id的值的三种方法
Posted chuangsi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取插入数据自动生成的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;
获取map集合中键和值的三种方式
//创建一个map集合 HashMap<String, Integer> map = new HashMap<>(); //添加元素 map.put("小王",25); map.put("小张",35); map.put("小李",20); 方法一:用增强for循环 //用keyset()方法获取所有的键 Set<String> keys = map.keySet(); for(String s:keys){ Integer value = map.get(s); System.out.print(s+" "); System.out.print(value+" "); } 方法二:用迭代器 //用keyset()方法获取所有的键 Set<String> keys = map.keySet(); //获取迭代器 Iterator<String> it = keys.iterator(); while(it.hasNext()){ String key = it.next(); Integer value = map.get(key); System.out.println(key+"******"+value); } 方法三:使用EntrySet()方法 //用EntrySet()方法把成对儿的键值放入到Set集合中 Set<Map.Entry<String, Integer>> entry = map.entrySet(); //for循环遍历 for(Map.Entry s:entry){ String key = (String)s.getKey(); int value = (int)s.getValue(); System.out.println(key+"*****"+value); }
以上是关于获取插入数据自动生成的id的值的三种方法的主要内容,如果未能解决你的问题,请参考以下文章