微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

问题描述

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



解决办法
      以下两种方法效果一致

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


<insert id="insert" parameterType="com.yealink.ptms.pojo.Rule" >
  <selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
    SELECT currval('rule_id_seq')
  </selectKey>
  INSERT INTO rule (name, used_dimension)
    VALUES (
      #{name, jdbcType=VARCHAR},
      #{usedDimension, jdbcType=OTHER, typeHandler=com.yealink.ptms.typeHandler.JSONTypeHandlerPg}
)
</insert>

2、采用useGeneratedKeys和keyProperty。useGeneratedKeys的取值范围true|false,认值是:false。 含义:设置是否使用JDBC的getGenereatedKeys方法获取主键,并赋值到keyProperty设置的领域模型属性中。mapper代码如下。

<insert id="insert" parameterType="com.yealink.ptms.pojo.Rule" useGeneratedKeys="true" keyProperty="id">
  INSERT INTO rule (name, used_dimension)
  VALUES (
  #{name, jdbcType=VARCHAR},
  #{usedDimension, jdbcType=OTHER, typeHandler=com.yealink.ptms.typeHandler.JSONTypeHandlerPg}
  )
</insert>

运行结果

     两种方法均能取到自增的id。


 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐