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

问题描述

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

【MyBtis】获取数据插入postgresql后返回的自增id_第1张图片

【MyBtis】获取数据插入postgresql后返回的自增id_第2张图片

 

解决办法

      以下两种方法效果一致

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

    
        
          SELECT currval('rule_id_seq')
        
        INSERT INTO rule (name, used_dimension)
        VALUES (
        #{name, jdbcType=VARCHAR},
        #{usedDimension, jdbcType=OTHER, typeHandler=com.yealink.ptms.typeHandler.JSONTypeHandlerPg}
        )
    

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


        INSERT INTO rule (name, used_dimension)
        VALUES (
        #{name, jdbcType=VARCHAR},
        #{usedDimension, jdbcType=OTHER, typeHandler=com.yealink.ptms.typeHandler.JSONTypeHandlerPg}
        )

 

运行结果

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

【MyBtis】获取数据插入postgresql后返回的自增id_第3张图片

【MyBtis】获取数据插入postgresql后返回的自增id_第4张图片

【MyBtis】获取数据插入postgresql后返回的自增id_第5张图片

 

你可能感兴趣的:(开发框架)