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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_EvanChen/article/details/82701799

问题描述

     数据库采用的是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。

猜你喜欢

转载自blog.csdn.net/Mr_EvanChen/article/details/82701799