【MyBtis】获取数据插入postgresql后返回的自增id

问题描述

     数据库采用的是postgresql,以下面的rule表为例,该表的id设置为自增,那么经常有这样的需求,在执行insert操作后,紧接着需要获取该记录的自增id往中间表中插入数据,或者是再根据id做一些查询之类的。

 

解决办法

      以下两种方法效果一致

1、采用selectKey做一个子查询,赋值给属性id,并设置order=“AFTER”让其是在INSERT之后再执行,这样才能获取到自增id。mapper代码如下。需要注意的是,这里的resultType要跟Rule实体中id的类型一致,否则会报错。

    <insert id="insert" parameterType="co
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis中,有两种方式可以获取插入数据后返回自增主键ID。 一种方式是在XML文件中设置属性。通过在插入语句上使用`<selectKey>`标签,在插入之前执行查询语句获取自增ID。例如,在PostgreSQL数据库中可以使用`currval()`函数获取自增ID。示例代码如下: ``` <insert id="insertUser" parameterType="User"> <selectKey statement="select currval('app_user_id_seq')" keyProperty="id" before="false" resultType="Long"/> INSERT INTO app_user (create_time, name, avatar, username, sex, id_number, score, ...) VALUES (#{createTime}, #{name}, #{avatar}, #{username}, #{sex}, #{id_number}, #{score}, ...) </insert> ``` 另一种方式是使用注解来实现。在插入方法上使用`@SelectKey`注解,其中的`statement`属性指定查询语句,`keyProperty`属性指定返回自增ID存放的属性名,`before`属性指定是否在插入之前执行查询语句,`resultType`属性指定返回自增ID的类型。示例代码如下: ``` @Insert("INSERT INTO app_user (create_time, name, avatar, username, sex, id_number, score, ...) VALUES (#{createTime}, #{name}, #{avatar}, #{username}, #{sex}, #{id_number}, #{score}, ...)") @SelectKey(statement="select currval('app_user_id_seq')", keyProperty="id", before="false", resultType=Long.class) int insert(User user); ``` 通过以上两种方式,在插入数据后,可以获取到相应的自增主键ID。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [mybatis插入数据后返回自增主键ID的2种方式](https://blog.csdn.net/lchmyhua88/article/details/125132281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [mybatis插入数据,返回新增数据的id值](https://blog.csdn.net/web13618542420/article/details/126112961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值