广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Mybatis批量插入并返回主键id的方法
  • 558
分享到

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

2024-04-02 19:04:59 558人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录场景错误分析原因排查问题场景 在做商城的时候,sku表进行了拆分,sku的基本信息以及sku的库存表。因为库存会经常的变动,会导致行锁。 这里就是新增的时候,因为在新增商品的时候

场景

在做商城的时候,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]

分析原因

  • 数据库是否支持自动生成密钥字段(例如MysqlSQL 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批量插入返回主键内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Mybatis批量插入并返回主键id的方法

本文链接: https://www.lsjlt.com/news/143812.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作