mybatis+postgresql返回递增主键的正确姿势及勘误

前言

某日需要更换成为postgresql,于是,mybatis返回递增主键便是一个问题。

网上做法

这里写图片描述

        <selectKey keyProperty="id" resultType="java.lang.Long" order="BEFORE">
            SELECT nextval('serial_project_id')
        </selectKey>
`
``

这段代码便是返回递增主键的值了,
那么我们看看实际插入记录以后的主键发布:

这里写图片描述

于是看到了生成的主键竟然不连续,问题到底出在哪里了?
让我们看看nextval这些函数的意义:

nextval('sequence_name'): 将当前值设置成递增后的值,并返回
currval('sequence_name'): 返回当前值
setval('sequence_name', n, b=true): 设置当前值;b 默认设置 true,下一次调用 nextval() 时,直接返回 n,如果设置 false,则返回 n+increment:

很明显我们调用nextval的时候已经改变了值,然后插入时候又会改一次。

解决方案

很简单:

        <selectKey keyProperty="id" resultType="java.lang.Long" order="BEFORE">
            SELECT nextval('serial_project_id')
        </selectKey>

改成:

        <selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER">
            SELECT currval('serial_project_id')
        </selectKey>
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值