日常项目开发中,经常会用到一个场景:在表中新增一条数据,需要得到该条数据的主键ID。如何不额外写一条查询语句来得到新增数据的主键ID呢?mybatis的selectKey实现了这个功能。

mybatis的selectKey在不同数据库中的用法有点区别:

oracle中的用法

 <insert id="insertUser" parameterClass="XXX.user"> <selectKey resultClass="long" keyProperty="id"order="BEFORE"> select SEQ_USER_ID.nextval as id from dual </selectKey> insert into user  (id,name,password) values (#{id},#{name},#{password}) </insert>

这句话会在插入user之前执行(order=“BEFORE”),该句话执行完之后,通过SEQ_USER_ID.nextval生成一个ID,传进来的参数User对象里的id字段就会被赋值成sequence的值,通过user.id即可获取新增数据的主键ID。

mysql中的用法

<insert id="insertUser" parameterClass="XXX.user"> insert into user (name,password) values (#{id},#{name},#{password}) <selectKeykeyProperty="id" order="AFTER" resultType="java.lang.Integer">  SELECT LAST_INSERT_ID() AS ID  </selectKey>  </insert>

该种用法是通过LAST_INSERT_ID() 获得刚插入的自动增长的id的值。插入之后获得ID赋值到传进来的对象中,通过user.id获取。

SelectKey用法详解:

1、SelectKey因为可以很随意的设置生成主键的方式,所以用在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题。使用它可以得到sequence的值(比如用在oracle中,就可以使用SEQ_USER_ID.nextval来生成一个主键),同时也会将值返回。对于不同的数据库有不同的操作方式。

2、SelectKey标签中有一个order属性,在不同的数据库中有不同的用法:
1)在支持自动增长类型的数据库(mysql)中,order需要设置为after才会取到正确的值。新增数据的时候mysql数据库通过自增取得主键ID,然后将值返回;
2)像Oracle这样取序列的情况,需要设置为before。通过序列化方法生成一个主键ID,之后插入数据库。

3、属性

insert返回主键 — mybatis selectKey相关推荐

  1. MyBatis—insert语句返回主键和selectKey标签

    本文已同步至个人博客liaosi's blog - MyBatis-insert语句返回主键和selectKey标签 往数据库中插入一条记录后,有时候我们需要这条记录的主键,用于后续的操作.如果在插入 ...

  2. mybatis+postgresql+insert返回主键,action,service侧

    mybatis+postgresql+insert返回主键,action,service侧 在网上找了很久主要的内容如下: <insert id="insertDynaVisitInf ...

  3. ibatis insert mysql_让iBatis中的insert返回主键

    让iBatis中的insert返回主键 [ibatis insert 返回 自增主键] parameterClass="RemarkInfo"> insert into SG ...

  4. mybatis insert 返回主键_面试准备季——MyBatis 面试专题(含答案)

    话不多说,直接上题-- 1.什么是 Mybatis? (1)Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱 ...

  5. mybatis insert返回主键_MyBatis官方文档XML 映射文件

    XML 映射文件 MyBatis 的真正强大在于它的映射语句,这是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省 ...

  6. Mybatis insert返回主键ID

    Mybatis insert语句书写insert  id= "insertSelective"  useGeneratedKeys= "true"  keyPr ...

  7. tkMyBatis执行insert返回主键

    数据库:MySQL 组件:tkMyBatis,和MyBatis有些不同 ActiveTaskLog taskLogDto = new ActiveTaskLog(); taskLogDto.setMe ...

  8. 使用mybatis插入数据(insert)时返回主键的问题

    使用mybatis做插入操作时,想要获取新增记录的主键,我发现现在的方式和以前的方式有所区别,即以前是直接通过方法返回,现在是将主键设置在数据实体对象中. 下面对mybatis进行insert时返回主 ...

  9. mybatis 主键自增 insert后返回主键

    mybatis 主键自增 insert后返回主键 : <insert id="insertStudentAutoKey" parameterType="Studen ...

最新文章

  1. 微软企业库4.1学习笔记(八)创建对象 续集2
  2. 称不上算法的算法-1.简单的高精度计算
  3. epoll的使用实例
  4. python3 安装pyinstaller_python3.7 打包(.exe)神器——pyinstaller 安装及用法
  5. 智能运维监管系统终端_智能运维系列(十三)| 面向智能化运维的CMDB系统构建...
  6. 英语口语 week12 Thursday
  7. 操作指令详解_爱码小士丨 APP稳定性测试(附视频详解)
  8. c语言入门自学课件ppt,C语言从初学到精通中文ppt版
  9. 前端开发专业实习报告
  10. Houdini学习笔记003
  11. 真正的爱情是日久生情
  12. 如何防止驱动被恶意利用
  13. android 程序数据目录,Android APP 数据存放目录
  14. 如何解决 Critical dependency: the request of a dependency is an expression ?
  15. 苹果为小学生推出编程指南
  16. GaussDB ETCD 服务异常实例分析处理的5种方法
  17. Photoshop CS6 for Mac破解版/序列号简介
  18. WWDC 2022:iPad上开发App不再是梦?新版Playgrounds来袭!
  19. Extjs6问题——grid不显示数据
  20. 无人驾驶常用传感器及其作用概述

热门文章

  1. 爱情是一出未经排练的戏
  2. android 屏幕切换监听
  3. Unity 2018.3.1 SyncVar没有同步服务器变量
  4. Juqery让世界更美好--超级简单实用的(上、下)自动翻的最佳效果,有图为证!...
  5. [WPF]WPF开发方法论
  6. (LeetCode 83)Remove Duplicates from Sorted Lists
  7. java 求数组最大子序列之和
  8. 如何访问ASP.Net网站bin目录内的文件
  9. P2577 [ZJOI2005]午餐
  10. Java集合框架体系(超详细)