mybatis动态sql,插入数据后返回主键id

问题背景:

在项目中,需要实现动态表单的功能,所以无法通过维护PO的方式直接完成记录的增删改查,所以通过mybatis原生的动态sql的方式,传入表名等完成crud。
其中要求增加数据的时候需要返回新增的记录主键id。

mybatis-plus实现方式

mybatis-plus对数据的增删改查有了良好的API封装,针对上述的需求,直接使用以下代码即可完成:

        this.baseMapper.insert(govOperLogPO);
        govOperLogPO.getId(); // 获取插入的自增主键

mybatis实现方式

mybatis需要通过编写xml文件,完成自增id的映射。

mapper中定义的插入语句函数,其中有两个参数:插入数据map,表名tableName

  * 插入数据
     *
     * @param record    记录以map的方式 key:列名,value内容
     * @param tableName
     * @return
     */
    Integer insertOneRecord(@Param("record") Map<String, Object> record, @Param("tableName") String tableName);

xml中定义的sql,有两种方式:

  • 方式1:SELECT LAST_INSERT_ID(),注意selectKey中的keyProperty参数,该参数表示返回值映射到参数的具体位置,record.id表示将返回的id值放置到上述定义的record中的id key下,即record.put(“id”, value), 如果record是个j实体对象,即相当于record.setId(value).
    <insert id="insertOneRecord">
        insert into ${tableName}
        <foreach collection="record" separator="," close=")" open="(" index="key" item="val">
            <if test="val != null">
                `${key}`
            </if>
        </foreach>
        values
        <foreach collection="record" separator="," close=")" open="(" index="key" item="val">
            <if test="val != null">
                #{val}
            </if>
        </foreach>

        <selectKey resultType="int" order="AFTER" keyProperty="record.id">
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>
  • 方式2: insert中增加参数 useGeneratedKeys=“true”,
<insert id="insertOneRecord" useGeneratedKeys="true" keyProperty="record.id">
        insert into ${tableName}
        <foreach collection="record" separator="," close=")" open="(" index="key" item="val">
            <if test="val != null">
                `${key}`
            </if>
        </foreach>
        values
        <foreach collection="record" separator="," close=")" open="(" index="key" item="val">
            <if test="val != null">
                #{val}
            </if>
        </foreach>
    </insert>
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值