Mybatis中Insert插入后返回主键id值

本文介绍了在Mybatis中如何在插入数据后获取自增主键的ID值。通过设置Mapper接口和XML配置,使用`useGeneratedKeys="true"`和`keyProperty="id"`或特定数据库的序列函数,可以实现插入后返回主键ID,并自动填充到Model实体类中。
摘要由CSDN通过智能技术生成

Mybatis中Insert插入后返回主键id值

PostgreSQL如何设置自增序列可以点这里:

Mapper的接口:

public interface ThesisMapper {
    int insertSelective(Thesis record);
}

无论什么情况下,interface接口中的int返回的都是影响的条数(可以用来识别成功插入与否),
而返回的自增长主键id值,Mybatis利用反射机制,自动帮我们回填到了Model实体类当中了。我们可以利用model.getId()来获取id值。
(当然,再insert之前,我们用getId()来获取是返回null的)

两种方法:

都是在 mapper.xml文件中

方法1:

    <insert id="insertSelective" parameterType="site.gaoyisheng.pojo.Thesis"
             useGeneratedKeys="true" keyProperty="id">
        insert into public.XXX
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="type != null">
                type,
            </if>
            <if test="type != null">
                ....,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="type != null">
                #{type,jdbcType=VARCHAR},
            </if>
            <if test="type != null">
                #{...},
            </if>
        </trim>
    </insert>

其中:
useGeneratedKeys=”true” 表明自增主键值
keyProperty=”id” 用来标识主键colum是’id’

方法2:

    <insert id="insertSelective" parameterType="site.gaoyisheng.pojo.Thesis"
             useGeneratedKeys="true" keyProperty="id">
        <selectKey resultType="int" keyProperty="id" order="BEFORE">
             select currval("自增序列的名称") as id
        </selectKey>

        insert into public.XXX
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="type != null">
                type,
            </if>
            <if test="type != null">
                ....,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="type != null">
                #{type,jdbcType=VARCHAR},
            </if>
            <if test="type != null">
                #{...},
            </if>
        </trim>
    </insert>

其中,

<selectKey resultType="int" keyProperty="id" order="BEFORE">
             select currval("自增序列的名称") as id
</selectKey>

currval(“自增序列的名称”)是PostgreSQL的序列函数,
在MySQL或者oracle中,函数这样用:

MySQL、SQLserver中:

  <selectKey resultType="_long" keyProperty="id" order="AFTER">
    select @@IDENTITY as id
  </selectKey>

oracle:

  <selectKey keyProperty="id" resultType="_long" order="BEFORE">
    select CAST(RANDOM * 100000 as INTEGER) a FROM SYSTEM.SYSDUMMY1
  </selectKey>

附录:


参考资料:

https://blog.csdn.net/timo1160139211/article/details/78193816
https://blog.csdn.net/sinat_30474567/article/details/51395247
https://blog.csdn.net/hardworking0323/article/details/51105136

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值