Mybatis @SelectKey用法解读

网友投稿 1435 2022-12-06

Mybatis @SelectKey用法解读

Mybatis @SelectKey用法解读

目录Mybatis @SelWVYirectKey用法用处用法属性注意Mybatis selectKey 采坑笔记1.现象描述2.问题排查3. selectKey 用法再认识4.selectKey用法的坑

Mybatis @SelectKey用法

用处

主要用WVYir来解决主键自增问题

用法

@SelectKey(statement="SELECT LAST_INSERT_ID()", keyProperty="clusterId", before=false, resultType=Integer.class)

属性

keyProperty 语句结果被设置的属性

resultType 结果的类型

order 可以被设置为before和after 如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。

statement 和前面的相 同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 语句的映射类型,分别代表 PreparedStatement 和CallableStatement 类型。

注意

SelectKey需要注意order属性,像mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。像Oracle这样取序列的情况,需要设置为before,否则会报错。像Oracle这样取序列的情况,需要设置为before,否则会报错。

Mybatis selectKey 采坑笔记

1.现象描述

观察某张表的数据时,发现设置了自增属性的AutoId,在插入数据后并不是自增的,而是数值跳跃着增加的。

2.问题排查

在确认AutoId的自增属性设置没有问题后,开始怀疑是不是insert语句的问题,insert语句是MyBatis Generator自动生成的,示例如下:

SELECT LAST_INSERT_ID()

insert into User (AutoId, UserId, Mobile, Username, CreateTime, LastModifyTime)

values (#{autoId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{mobile,jdbcType=VARCHAR},

#{username,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{lastModifyTime,jdbcType=TIMESTAMP}

)

insert into 语句在语法上是没有问题的,那缩小排查范围,就是selectKey的用法可能有问题!

3. selectKey 用法再认识

resultType表示的是返回主键的类型

keyProperty对应的domain 对象中需要被赋值的属性,一般是主键

order如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素

4.selectKey用法的坑

SelectKey需要注意order属性,像MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值,像Oracle这样取序列的情况,需要设置为before。

在上面示例的insert用法中,就是order属性设置成了BEFORE才导致自增属性没有生效。改成AFTER后,主键就开始自增了。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mybatis插入时返回自增主键方式(selectKey和useGeneratedKeys)
下一篇:springboot多数据源配合docker部署mysql主从实现读写分离效果
相关文章

 发表评论

暂时没有评论,来抢沙发吧~