文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mybatis @SelectKey用法解读

2024-04-02 19:55

关注

Mybatis @SelectKey用法

用处

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

用法


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

属性

注意

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

Mybatis selectKey 采坑笔记

1.现象描述

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

2.问题排查

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


<insert id="insert" parameterType="com.xx.yy.datasource.domain.User" >
  <selectKey resultType="java.lang.Long" keyProperty="autoId" order="BEFORE" >
  SELECT LAST_INSERT_ID()
</selectKey>
  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>

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

3. selectKey 用法再认识

4.selectKey用法的坑

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯