博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SELECT LAST_INSERT_ID() 的使用和注意事项
阅读量:2059 次
发布时间:2019-04-29

本文共 1325 字,大约阅读时间需要 4 分钟。

尊重个人劳动成果,转载请注明出处:

首先我先解释以下在在映射文件中的代码是什么意思。

INSERT stu(name)VALUES (#{name})
SELECT LAST_INSERT_ID()
  • 总体解释:将插入数据的主键返回到 user 对象中。
  • 具体解释:
    • SELECT LAST_INSERT_ID():得到刚 insert 进去记录的主键值,只适用与自增主键
    • keyProperty:将查询到主键值设置到 parameterType 指定的对象的那个属性
    • order:SELECT LAST_INSERT_ID() 执行顺序,相对于 insert 语句来说它的执行顺序
    • resultType:指定 SELECTLAST_INSERT_ID() 的结果类型

明白是什么意思后,那么我们要如何才能得到插入数据的主键呢?请看下面代码就知道了

关键代码:

@Testpublic void main() throws Exception {    StudentDao studentDao = new StudentDao();    // 增加    Student student = new Student();    student.setName("b");    studentDao.testInsertStudent(student);} public void testInsertStudent(Student student) throws Exception {    SqlSession sqlSession = getSession().openSession();    sqlSession.insert(nameSpace + ".insertStudent", student);    sqlSession.commit();    sqlSession.close();    // 得到插入数据的主键并将其打印出来    System.out.println("index: "+student.getId());}

打印结果:

这里写图片描述

其中 index:21 就是我们想要的 id 值了

看到这里不知道有没有读者觉得这不是废话吗?student.getId() 后肯定是得到新插入数据的 id 呀。ok,那么我们来验证一下,把上面映射文件中的这段代码删掉。

SELECT LAST_INSERT_ID()

打印结果:

这里写图片描述

从图中我们可以发现程序没有执行 SELECT LAST_INSERT_ID()语句了,并且 index 的值变成了 null,也就是得不到新插入数据的 id 了

到此为止,相信你应该知道怎么使用 SELECT LAST_INSERT_ID() 了吧。

注意点:假如你使用一条INSERT语句插入多个行, LAST_INSERT_ID() 只会返回插入的第一行数据时产生的值。比如我插入了 3 条数据,它们的 id 分别是 21,22,23.那么最后我还是只会得到 21 这个值。

你可能感兴趣的文章
安装系统之二 U盘启动盘制作---UEFI版
查看>>
安装系统之四 U盘装GHOST XP教程
查看>>
安装系统之五 U盘装原版XP教程
查看>>
安装系统之六 U盘装GHOST WIN7教程
查看>>
安装系统之八 U盘装GHOST WIN8教程
查看>>
安装系统之九 U盘装原版WIN8教程
查看>>
安装系统之三 U盘启动盘建立磁盘分区教程
查看>>
系统安装之十 U盘安装原版win10
查看>>
安装系统之十一 UEFI和Legacy及UEFI+Legacy启动的区别
查看>>
树莓派屏幕---------Android手机作为树莓派的屏幕
查看>>
嵌入式 知识点 积累 (一)
查看>>
嵌入式 知识积累 (二) 之 三个学习阶段
查看>>
嵌入式 知识积累(三) 之 基本技能
查看>>
嵌入式 知识积累(四) 之 硬件开发的基本过程
查看>>
嵌入式 知识积累(五)之硬件工程师具备基本技能
查看>>
中小型园区网络的设计与实现 (一)
查看>>
别人的难题,就是你的价值。
查看>>
中小型园区网络的设计与实现 (二)
查看>>
中小型园区网络的设计与实现 (三)
查看>>
VLAN与子网划分区别
查看>>