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

【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。


 

标签:MyBtis,postgresql,name,typeHandler,自增,rule,获取数据,jdbcType,id
来源: https://www.cnblogs.com/hahajayou/p/11685927.html