栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis批量插入,并返回主键id

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis批量插入,并返回主键id

目录

场景错误分析原因排查问题附上完整的Mapper以及Xml文件

场景

在做商城的时候,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 into goods_sku (goods_id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time) values
    
        
            (#{param2},#{item.images},#{item.indexes},#{item.spec},#{item.price},#{item.size},#{item.bkgeScale},#{item.teamScale},#{item.directScale},#{item.enable},#{param3},#{param3})
        
    

进行修改:


    insert into goods_sku
    (goods_id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time) values
    
        
            (#{param2},#{item.images},#{item.indexes},#{item.spec},#{item.price},#{item.size},#{item.bkgeScale},#{item.teamScale},#{item.directScale},#{item.enable},#{param3},#{param3})
        
    

    依赖版本:
附上完整的Mapper以及Xml文件

GoodsSkuMapper.java

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

GoodsSkuMapper.xml


    insert into goods_sku (goods_id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time) values
    
        
            (#{param2},#{item.images},#{item.indexes},#{item.spec},#{item.price},#{item.size},#{item.bkgeScale},#{item.teamScale},#{item.directScale},#{item.enable},#{param3},#{param3})
        
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号