Mybatis selectKey获取自增主键总是null

一、遇到的坑:selectKey 返回的主键总是null

按照网上帖子说的方式配置了insert语句返回自增主键的查询。如下:

<insert id="insertxxxx" parameterType="com.xxx.xxx.entity.XXXXEntity">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
        insert into tbl_xxx(colunm1,colunm2)
        values(#{record.itme1},#{record.itme2})

可是,getId()获取自增主键时总是返回null。

分析原理:
mybatis会将查询出来的自增主键值封装到要插入的数据对象XXXEntity的实例中。
但是注意,你需要检查你的mapper中的输入参数,是否使用了@Param("record")。record是我自定义对象别名。
xxxxMapper.java:

int insertxxxx(@Param(“record”)XXXXEntity record);

如果使用了别名,那么selectKey 中的 keyProperty应该这样写:
keyProperty="record.id"
如果没有设置别名@Param,可以直接写keyProperty=“id”
接收自增主键时,需要用传入insertxxxx方法的对象.getId()获取。
前提:请确保,你的XXXXEntity 中有字段:id。
否则会报错。

当然你也可以使用其他字段,代替字段id。写法完全相同。

二、另一种获取insert之后的自增主键的方式:
<insert id="insertAAAA" useGeneratedKeys="true"  keyProperty="id" parameterType="com.xxxxx.entity.AAAAEntity">
 insert into aaaa
 values (#{ssss})
</insert> 

在可以实现自增主键的数据库中,这么配置也可以获取到insert之后的表的自增主键。
官网解释如下:
网址:https://mybatis.org/mybatis-3/zh/configuration.html#properties

三、总结:mybatis中想在insert语句中获取自增主键的方式有两种。

第一种:在isnert标记块内部的insert语句前面,或者后面都可以。因为order=“AFTER”,代表的是:插入后,再获取主键值。

<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">

第二种:直接在insert标记行中增加字段:

<insert id="insertAAAA" useGeneratedKeys="true"  keyProperty="id"  ......>

<完>

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值