insert返回主键 — mybatis selectKey
日常项目开发中,经常会用到一个场景:在表中新增一条数据,需要得到该条数据的主键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相关推荐
- MyBatis—insert语句返回主键和selectKey标签
本文已同步至个人博客liaosi's blog - MyBatis-insert语句返回主键和selectKey标签 往数据库中插入一条记录后,有时候我们需要这条记录的主键,用于后续的操作.如果在插入 ...
- mybatis+postgresql+insert返回主键,action,service侧
mybatis+postgresql+insert返回主键,action,service侧 在网上找了很久主要的内容如下: <insert id="insertDynaVisitInf ...
- ibatis insert mysql_让iBatis中的insert返回主键
让iBatis中的insert返回主键 [ibatis insert 返回 自增主键] parameterClass="RemarkInfo"> insert into SG ...
- mybatis insert 返回主键_面试准备季——MyBatis 面试专题(含答案)
话不多说,直接上题-- 1.什么是 Mybatis? (1)Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱 ...
- mybatis insert返回主键_MyBatis官方文档XML 映射文件
XML 映射文件 MyBatis 的真正强大在于它的映射语句,这是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省 ...
- Mybatis insert返回主键ID
Mybatis insert语句书写insert id= "insertSelective" useGeneratedKeys= "true" keyPr ...
- tkMyBatis执行insert返回主键
数据库:MySQL 组件:tkMyBatis,和MyBatis有些不同 ActiveTaskLog taskLogDto = new ActiveTaskLog(); taskLogDto.setMe ...
- 使用mybatis插入数据(insert)时返回主键的问题
使用mybatis做插入操作时,想要获取新增记录的主键,我发现现在的方式和以前的方式有所区别,即以前是直接通过方法返回,现在是将主键设置在数据实体对象中. 下面对mybatis进行insert时返回主 ...
- mybatis 主键自增 insert后返回主键
mybatis 主键自增 insert后返回主键 : <insert id="insertStudentAutoKey" parameterType="Studen ...
最新文章
- 微软企业库4.1学习笔记(八)创建对象 续集2
- 称不上算法的算法-1.简单的高精度计算
- epoll的使用实例
- python3 安装pyinstaller_python3.7 打包(.exe)神器——pyinstaller 安装及用法
- 智能运维监管系统终端_智能运维系列(十三)| 面向智能化运维的CMDB系统构建...
- 英语口语 week12 Thursday
- 操作指令详解_爱码小士丨 APP稳定性测试(附视频详解)
- c语言入门自学课件ppt,C语言从初学到精通中文ppt版
- 前端开发专业实习报告
- Houdini学习笔记003
- 真正的爱情是日久生情
- 如何防止驱动被恶意利用
- android 程序数据目录,Android APP 数据存放目录
- 如何解决 Critical dependency: the request of a dependency is an expression ?
- 苹果为小学生推出编程指南
- GaussDB ETCD 服务异常实例分析处理的5种方法
- Photoshop CS6 for Mac破解版/序列号简介
- WWDC 2022:iPad上开发App不再是梦?新版Playgrounds来袭!
- Extjs6问题——grid不显示数据
- 无人驾驶常用传感器及其作用概述
热门文章
- 爱情是一出未经排练的戏
- android 屏幕切换监听
- Unity 2018.3.1 SyncVar没有同步服务器变量
- Juqery让世界更美好--超级简单实用的(上、下)自动翻的最佳效果,有图为证!...
- [WPF]WPF开发方法论
- (LeetCode 83)Remove Duplicates from Sorted Lists
- java 求数组最大子序列之和
- 如何访问ASP.Net网站bin目录内的文件
- P2577 [ZJOI2005]午餐
- Java集合框架体系(超详细)