获取插入数据自动生成的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的值的三种方法的主要内容,如果未能解决你的问题,请参考以下文章

php cli模式下获取用户输入值的三种方法

获取map集合中键和值的三种方式

交换两个变量的值的三种实现方式

如何获取新插入Oracle数据库Sequence值的5种方法

js jquery 获取服务器控件的三种方法

Mybatis+Oracle --批量插入