SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。...Mapper(Oracle) select wxsh_seq.nextval as id from dual </selectKey
在MyBatis这样的持久层框架中,经常需要插入一条记录并取得该记录所对应的主键值。...一、使用元素 元素来获取主键值。...二、使用useGeneratedKeys属性 <MyBatis 还提供了一种更加简洁的方式,在insert语句中指定useGeneratedKeys属性即可。...三、注意事项 在MyBatis中处理主键值时,需要注意以下几点: 1、不同的数据库对于主键自动化增长的实现方式有所区别,因此在调用或设置useGeneratedKeys属性时可能需要进行不同的配置或查询等操作...总之,在MyBatis中获取自动生成的主键值可以通过和useGeneratedKeys属性两种方式实现。
下边看一下mybatis的映射文件。...否则selectKey的结果没法保存,如果入参是个Map类型,就没有这个限制。...3.这种方式只是利用了selectKey会多执行一次查询来实现的,但是如果你同时还需要通过selectKey获取序列或者自增的id,就会麻烦很多(oracle麻烦,其他支持自增的还是很容易),例如我在上一篇中利用...selectKey 获取主键Id。...4.建议单独查看学习一下selectKey的用法。
MyBatis 致力于减少使用成本,让开发者能更专注于 SQL 代码。...二、工程搭建 新建一个maven工程mybatis-mapping-xml,工程搭建步骤与上一篇QA 由浅入深持久层框架(二) - MyBatis Config XML中的搭建步骤一致。...keyProperty (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey...selectKey标签有以下属性 属性 描述 keyProperty selectKey 语句结果应该被设置到的目标属性。如果生成列不止一个,可以用逗号分隔多个属性名称。...通常 MyBatis 可以推断出来,但是为了更加准确,写上也不会有什么问题。MyBatis 允许将任何简单类型用作主键的类型,包括字符串。
一、Mybatis执行插入语句后可以返回主键ID吗? 在想写什么内容的时候,正好看到一个基础面试题上有这个问题,就把它记录下来了。 面试官:你说Mybatis执行插入语句后可以返回主键ID吗??...我:当然是可以的,连JDBC都能做到的事情,Mybatis也能做到的。...传入的参数必须为对象,不能为String int 之类的单个参数 order属性,取值范围BEFORE|AFTER,指定是在insert语句前还是后执行selectKey操作。...keyProperty属性,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中,也就是你实体类中,对应数据库的主键id。...二、Mybatis-Plus在执行插入语句后返回自定义ID 面试官:那你会用Mybatis-Plus吗?Mybatis-Plus如何做这件事情啊,有简单的方式吗?
", user); session.commit(); return user.getUserId();//返回插入数据库后得到的用户id } 这里总结一下mybatis... <selectKey keyProperty="...NOCYCLE; -- 不循环 利用USER_ID_SEQ.NEXTVAL 获得要插入数据的主键: <insert id="insertUser" parameterType="com.danny.<em>mybatis</em>.po.User...主键为UUID时 用oracle自带的SYS_GUID()方法获得随机的GUID作为主键: <insert id="insertUser" parameterType="com.danny.<em>mybatis</em>.po.User
MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。...对于主键自动生成的情况,获取每次新产生数据ID号(selectKey)--> select last_insert_id(); selectKey和useGeneratedKeys的区别 selectKey标签用法 useGeneratedKeys属性用法 二者区别 selectKey标签需要明确编写获取最新主键的...SQL语句 useGeneratedKeys属性会自动根据驱动生成对应SQL语句 应用场景 selectKey适合所有的关系型数据库 useGeneratedkeys只支持"自增主键"类型的数据库 更新数据
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <!...:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample; 2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;...column:主键的列名; sqlStatement:要生成的selectKey语句,有以下可选项: Cloudscape:相当于selectKey...Derby :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL() HSQLDB :相当于selectKey的SQL为...:相当于selectKey的SQL为:SELECT SCOPE_IDENTITY() SYBASE :相当于selectKey的SQL为:SELECT @@IDENTITY
其实可以通过 mybatis 的 selectKey 标签来解决这个问题。 selectKey 这个标签大家基本上都用过,比如在插入数据的时候,返回插入数据的纪录。...如: SELECT LAST_INSERT_ID()... insert into …… resultType :返回的类型,为简单类型。 ...此处用法用法就是当 insert into 执行后 执行 selectKey 的内容将数据库的最后一个id 查询出来映射到传入数据对像的ID 属性。 写更新语句,并将更新的纪录的ID 返回出来。...当返回空记录的时候 mybatis会报错,说不能转换成 int 型。 当返回null的时候就会转换成int 的 0 。不会报错,代表没有查到。
其实可以通过 mybatis 的 selectKey 标签来解决这个问题。 selectKey 这个标签大家基本上都用过,比如在插入数据的时候,返回插入数据的纪录。...如: SELECT LAST_INSERT_ID()... insert into …… resultType :返回的类型,为简单类型。 ...此处用法用法就是当 insert into 执行后 执行 selectKey 的内容将数据库的最后一个id 查询出来映射到传入数据对像的ID 属性。...当返回空记录的时候 mybatis会报错,说不能转换成 int 型。 当返回null的时候就会转换成int 的 0 。不会报错,代表没有查到。
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <!...column:主键的列名; sqlStatement:要生成的selectKey语句,有以下可选项: Cloudscape:相当于selectKey...Derby :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL() HSQLDB :相当于selectKey的SQL...where tabid=1 MySql :相当于selectKey的SQL为:SELECT LAST_INSERT_ID()...SqlServer :相当于selectKey的SQL为:SELECT SCOPE_IDENTITY() SYBASE :相当于selectKey的SQL为:SELECT
下面记录MyBatis关于INSERT操作的笔记,以便日后查阅。...五、 selectKey子元素 详解 作用:在insert元素和update元素中插入查询语句。 ...,PREPARED(默认值),CALLABLE 注意:selectKey操作会将操作查询结果赋值到insert元素的parameterType的入参实例下对应的属性中。...item.name} as a, #{item.age} as b FROM DUAL 七、总结 关于MyBatis...八、参考 http://mybatis.github.io/mybatis-3/zh/dynamic-sql.html
代码直接放在Github仓库【https://github.com/Damaer/Mybatis-Learning/tree/master/mybatis-05-CURD 】 需要声明的是:此Mybatis...学习笔记,是从原始的Mybatis开始的,而不是整合了其他框架(比如Spring)之后,个人认为,这样能对它的功能,它能帮我们做什么,有更好的理解,后面再慢慢叠加其他的功能。...1.useGeneratedKeys 设置主键自增 2.使用selectKey 查询主键 我们知道很多时候我们有一个需求,我们需要把插入数据后的id返回来,以便我们下一次操作。.../insert> 两种方式的结果: 注意要点: 1.最外层的没有返回属性(resultType),但是里面的是有返回值类型的...2.order="AFTER"表示先执行插入,之后才执行selectkey语句的。
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <!...column:主键的列名; sqlStatement:要生成的selectKey语句,有以下可选项: Cloudscape:相当于selectKey的...SQL为: VALUES IDENTITY_VAL_LOCAL() DB2 :相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL...Derby :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL() HSQLDB :相当于selectKey的SQL...:相当于selectKey的SQL为:SELECT SCOPE_IDENTITY() SYBASE :相当于selectKey的SQL为:SELECT @[@IDENTITY
column:主键的列名; sqlStatement:要生成的selectKey语句,有以下可选项: Cloudscape:相当于selectKey...的SQL为: VALUES IDENTITY_VAL_LOCAL() DB2 :相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL...Derby :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL() HSQLDB :相当于selectKey的SQL...where tabid=1 MySql :相当于selectKey的SQL为:SELECT LAST_INSERT_ID()...SqlServer :相当于selectKey的SQL为:SELECT SCOPE_IDENTITY() SYBASE :相当于selectKey的SQL为:SELECT
代码直接放在Github仓库【https://github.com/Damaer/Mybatis-Learning/tree/master/mybatis-05-CURD 】undefined需要声明的是...:此Mybatis学习笔记,是从原始的Mybatis开始的,而不是整合了其他框架(比如Spring)之后,个人认为,这样能对它的功能,它能帮我们做什么,有更好的理解,后面再慢慢叠加其他的功能。...5.实体类中id属性字段一定需要set以及get方法 [20201205213916.png] 使用selectKey 查询主键 两种方式的结果: 注意要点: 1.最外层的没有返回属性(resultType),但是里面的是有返回值类型的...2.order="AFTER"表示先执行插入,之后才执行selectkey语句的。
keyProperty (仅对 insert 有用) 标记一个属性, MyBatis 会通过 getGeneratedKeys 或者通过 insert 语句的 selectKey 子元素设置它的值。...keyColumn (仅对 insert 有用) 标记一个属性, MyBatis 会通过 getGeneratedKeys 或者通过 insert 语句的 selectKey 子元素设置它的值。...selectKey 属性 描述 keyProperty selectKey 语句结果应该被设置的目标属性。...如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素- 这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。
主键回填其实是一个非常常见的需求,特别是在数据添加的过程中,我们经常需要添加完数据之后,需要获取刚刚添加的数据 id,无论是 Jdbc 还是各种各样的数据库框架都对此提供了相关的支持,本文我就来和和大家分享下数据库主键回填在 MyBatis...这个是原生的写法,在 MyBatis 中,对此需求提供了两种不同的实现方案,下面分别来看。...MyBatis 的基本用法就无需多说了,这也不是本文的重点,我们还是来看看 MyBatis 中主键回填的两种不同实现方式吧!...,如果是做主键回填,我们当然需要在插入 SQL 执行之后执行 selectKey 节点中的 SQL。...总结 好了,本文向大家介绍了 MyBatis 中主键回填的两种方式,大家有没有 get 到呢?有问题欢迎留言讨论。
领取专属 10元无门槛券
手把手带您无忧上云