Mybatis批量插入并返回主键id的方法

 更新时间:2022年03月24日 16:43:23   作者:咬鱼的胖橘猫  
本文主要介绍了Mybatis批量插入并返回主键id的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

场景

在做商城的时候,sku表进行了拆分,sku的基本信息以及sku的库存表。因为库存会经常的变动,会导致行锁。

这里就是新增的时候,因为在新增商品的时候,会有多条sku的数据进行批量的插入,那么有批量插入sku基本信息以及批量插入sku的库存信息。

其中,就需要批量插入sku的基本信息的时候,返回主键id,这就能够在sku批量插入库存信息的时候能够插入skuId;

错误

nested exception is org.apache.ibatis.executor.ExecutorException: 
Error getting generated key or setting result to parameter object. 
Cause: org.apache.ibatis.executor.ExecutorException: Could not determine which parameter to assign generated keys to. 
Note that when there are multiple parameters, 'keyProperty' must include the parameter name (e.g. 'id'). Specified key properties are [id] and available parameters are [XXX, XXX, param1, param2]

分析原因

  • 数据库是否支持自动生成密钥字段(例如MySQL和SQL Server),那么就只需设置useGeneratedKeys=“true” 并将 keyProperty设置为Java对象的属性名,keyColumn是数据库中的列名(当主键列不是表中的第一列的时候,它必须设置的)
  • 传参有多个个参数,mybatis并不知道keyProperty = "id"中的 id 赋值给谁
  • (我就是这里出错)
  • 我看其他的博客还有说是版本的问题,建议3.3.1以上的。

排查问题

数据库是MySQL,设置了 useGeneratedKeys=“true” ,且 keyProperty = id是Java对象的属性名,id是主键列且在第一列中

就是这里出错,keyProperty=“id”,导致不知道id返回到哪一个参数中

原来:

<insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
    insert into goods_sku (goods_id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time) values
    <foreach collection="param1" item="item" index="index" separator=",">
        <if test="item != null">
            (#{param2},#{item.images},#{item.indexes},#{item.spec},#{item.price},#{item.size},#{item.bkgeScale},#{item.teamScale},#{item.directScale},#{item.enable},#{param3},#{param3})
        </if>
    </foreach>
</insert>

进行修改:

<insert id="insertBatch" useGeneratedKeys="true" keyProperty="goodsSkuDTOs.id">
    insert into goods_sku
    (goods_id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time) values
    <foreach collection="param1" item="item" index="index" separator=",">
        <if test="item != null">
            (#{param2},#{item.images},#{item.indexes},#{item.spec},#{item.price},#{item.size},#{item.bkgeScale},#{item.teamScale},#{item.directScale},#{item.enable},#{param3},#{param3})
        </if>
    </foreach>
</insert>

依赖版本:

附上完整的Mapper以及Xml文件

GoodsSkuMapper.java

int insertBatch(@Param("goodsSkuDTOs") List<GoodsSkuDTO> goodsSkuDTOs, @Param("goodsId") Long goodsId,@Param("date") Date date);

GoodsSkuMapper.xml

<insert id="insertBatch" useGeneratedKeys="true" keyProperty="goodsSkuDTOs.id">
    insert into goods_sku (goods_id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time) values
    <foreach collection="param1" item="item" index="index" separator=",">
        <if test="item != null">
            (#{param2},#{item.images},#{item.indexes},#{item.spec},#{item.price},#{item.size},#{item.bkgeScale},#{item.teamScale},#{item.directScale},#{item.enable},#{param3},#{param3})
        </if>
    </foreach>
</insert>

到此这篇关于Mybatis批量插入并返回主键id的方法的文章就介绍到这了,更多相关Mybatis批量插入返回主键内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Cloud Gateway自定义异常处理Exception Handler的方法小结

    Spring Cloud Gateway自定义异常处理Exception Handler的方法小结

    这篇文章主要介绍了Spring Cloud Gateway自定义异常处理Exception Handler的方法,本文通过两种方法结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Java内部类的实现原理与可能的内存泄漏说明

    Java内部类的实现原理与可能的内存泄漏说明

    这篇文章主要介绍了Java内部类的实现原理与可能的内存泄漏说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Spring Boot如何整合FreeMarker模板引擎

    Spring Boot如何整合FreeMarker模板引擎

    这篇文章主要介绍了Spring Boot如何整合FreeMarker模板引擎,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 简单实现java数独游戏

    简单实现java数独游戏

    这篇文章主要教大家如何简单实现java数独游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Java实战之在线租房系统的实现

    Java实战之在线租房系统的实现

    这篇文章主要介绍了利用Java实现的在线租房系统,文中用到了SpringBoot、Redis、MySQL、Vue等技术,文中示例代码讲解详细,需要的可以参考一下
    2022-02-02
  • 一文弄懂Maven依赖范围

    一文弄懂Maven依赖范围

    本文详细介绍了Maven依赖范围的概念、应用及其在项目构建和管理中的重要性,依赖范围包括compile、provided、runtime、test和system等类型,每种范围定义了依赖在不同构建阶段的可用性和打包行为,感兴趣的可以了解一下
    2024-11-11
  • java关键字static的使用详解

    java关键字static的使用详解

    这篇文章主要介绍了java关键字static的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java算法之递归算法计算阶乘

    Java算法之递归算法计算阶乘

    这篇文章主要为大家详细介绍了Java递归算法计算阶乘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • 基于IntBuffer类的基本用法(详解)

    基于IntBuffer类的基本用法(详解)

    下面小编就为大家带来一篇基于IntBuffer类的基本用法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 聊聊关于Java方法重写的反思

    聊聊关于Java方法重写的反思

    最近在开发中遇到一个关于Java方法重写的一些问题,对于方法重写的用法以及可能导致的问题产生了一些思考,本文用于记录下这些想法,希望对大家也有所帮助
    2023-05-05

最新评论