尊重个人劳动成果,转载请注明出处: 
http://blog.csdn.net/czd3355/article/details/71302441

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


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

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

关键代码:

@Test
public 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,那么我们来验证一下,把上面映射文件中的这段代码删掉。

 <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>

打印结果:

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

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

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

注意:这个函数是MySql数据库的函数

关于SELECT LAST_INSERT_ID()的使用规则的更多相关文章

  1. 阿里读写分离数据源SELECT LAST_INSERT_ID()获取不到id

    异常现象 insert 通过 mybatis 以下语法给领域类 赋予的 id 值为0. 后续根据主键的update操作失效.且无异常抛出 <selectKey keyProperty=" ...

  2. SELECT LAST_INSERT_ID() 的使用和注意事项

    SELECT LAST_INSERT_ID() 的使用和注意事项 尊重个人劳动成果,转载请注明出处: http://blog.csdn.net/czd3355/article/details/7130 ...

  3. mysql select last_insert_id()函数返回的值

    mysql)); 创建表j 插入数据 mysql> insert into j(name) values('wanggiqpg'); Query OK, row affected (0.00 s ...

  4. 插入数据时候获取返回的id 很重要 不要忘记写select last_insert_id()

  5. MySQL的mysql_insert_id和LAST_INSERT_ID(转)

    本文介绍的是mysql中last_insert_id和mysql_insert_id的区别 1 mysql_insert_id 一.PHP获取MYSQL新插入数据的ID mysql_insert_id ...

  6. MySQL的mysql_insert_id和LAST_INSERT_ID

    摘要:mysql_insert_id和LAST_INSERT_ID二者作用一样,均是返回最后插入值的ID 值 1 mysql_insert_id 一.PHP获取MYSQL新插入数据的ID  mysql ...

  7. 用于 SELECT 和 WHERE 子句的函数

    一个 SQL 语句中的 select_expression 或 where_definition 可由任何使用了下面所描述函数的表达式组成. 包含 NULL 的表达式总是得出一个 NULL 值结果,除 ...

  8. 深入浅出MySQL++数据库开发、优化与管理维护+第2版+唐汉明 -- 存储引擎 - 数据类型 - 字符集和校验规则 -

    create schema deepInMySql;use deepInMySql; -- 查看当前默认存储引擎show variables like '%table_type%'; -- 查看当前数 ...

  9. Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)

    本文介绍的是mysql中last_insert_id和mysql_insert_id的区别 1 mysql_insert_id 一.PHP获取MYSQL新插入数据的ID mysql_insert_id ...

随机推荐

  1. AM3358--Uboot支持LCD输出1024*768

    1. uboot/include/lcd/tq3358_fb.h #define TFT240320 1 #define TFT320240 2 #define TFT480272 3//T43(天嵌 ...

  2. 安装STS报错(一)

    安装STS报错 1.具体报错如下 2.报错原因 3.解决办法

  3. freemarker报错之十二

    1.错误描述 六月 04, 2014 10:31:47 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...

  4. VxWorks启动过程详解(上)

    vxworks有三种映像: VxWorks Image的文件类型有三种 Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM ROM-based Images(压缩/没有压 ...

  5. Scrapyd日志输出优化

    现在维护着一个新浪微博爬虫,爬取量已经5亿+,使用了Scrapyd部署分布式. Scrapyd运行时会输出日志到本地,导致日志文件会越来越大,这个其实就是Scrapy控制台的输出.但是这个日志其实有用 ...

  6. 最新数组方法(包括es6)

    整理目前所用过的数组方法,学习了新增的es6方法. 1 arr.push() 从后面添加元素,返回值为添加完后的数组的长度 let arr = [1,2,3,4,5] console.log(arr. ...

  7. class-k近邻算法kNN

    1 k近邻算法2 模型2.1 距离测量2.2 k值选择2.3 分类决策规则3 kNN的实现--kd树3.1 构造kd树3.2 kd树搜索 1 k近邻算法 k nearest neighbor,k-NN ...

  8. 利用SSH端口转发实现跨机器直接访问

    在实际项目测试中经常会遇到数据库操作,但是因为公司安全问题,访问数据库往往需要通过跳板机.但通过跳板机,测试效率大打折扣,因此通过使用SSH端口转发,从而达到跨机器直接访问数据库.实际项目中的应用会比 ...

  9. CEOI2004锯木厂选址

    斜率优化 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <s ...

  10. Myeclipse插件快速生成ssh项目并配置注解 在action层注入service的超详细过程

    最近发现,我对于ssh的 自动注入配置 还是不熟悉,于是整理了一下 终于做了一个 简单的 注入配置出来. 以前都是在applicationContext.xml 里面这样配 <bean id=& ...