s"">
当前位置:   article > 正文

Mybatis selectKey 采坑笔记_"

" s"

1.现象描述

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

2.问题排查

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

 
  1. <insert id="insert" parameterType="com.xx.yy.datasource.domain.User" >
  2. <selectKey resultType="java.lang.Long" keyProperty="autoId" order="BEFORE" >
  3. SELECT LAST_INSERT_ID()
  4. </selectKey>
  5. insert into User (AutoId, UserId, Mobile, Username, CreateTime, LastModifyTime)
  6. values (#{autoId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{mobile,jdbcType=VARCHAR},
  7. #{username,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{lastModifyTime,jdbcType=TIMESTAMP}
  8. )
  9. </insert>


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后,主键就开始自增了。


更多内容欢迎关注个人微信公众号,一起成长!


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/241365
推荐阅读
相关标签
  

闽ICP备14008679号