mybatis批量insert返回主键,mybatis自动生成主键
目录
场景错误分析原因排查问题
场景
在做商城的时候,sku表进行了拆分,sku的基本信息以及库存单位的库存表。因为库存会经常的变动,会导致行锁。这里就是新增的时候,因为在新增商品的时候,会有多条库存单位的数据进行批量的插入,那么有批量插入库存单位基本信息以及批量插入库存单位的库存信息。
其中,就需要批量插入库存单位的基本信息的时候,返回主键id,这就能够在库存单位批量插入库存信息的时候能够插入鱿鱼
错误
嵌套异常为org。阿帕奇。伊巴提斯。执行人。执行程序异常:获取生成的关键字或将结果设置为参数对象时出错。原因: org。阿帕奇。伊巴提斯。执行人。执行程序异常:无法确定将生成的键赋给哪个参数。请注意,当有多个参数时,“关键属性”必须包括参数名称(例如,“id”).指定的关键属性是[id],可用参数是[XXX,XXX,param1,param2]
分析原因
数据库是否支持自动生成密钥字段(例如关系型数据库和结构化查询语言服务器),那么就只需设置useGeneratedKeys=“true” 并将 keyProperty设置为Java对象的属性名,keyColumn是数据库中的列名(当主键列不是表中的第一列的时候,它必须设置的)。传参有多个个参数,mybatis并不知道keyProperty = "id"中的 id 赋值给谁(我就是这里出错)我看其他的博客还有说是版本的问题,建议3.3.1以上的。
排查问题
数据库是MySQL,设置了useGeneratedKeys="true ",且keyProperty=id是爪哇对象的属性名,id是主键列且在第一列中就是这里出错,keyProperty="id ",导致不知道编号返回到哪一个参数中
原来:
insert id= insert batch useGeneratedKeys= true key property= id insert into goods _ SKU(goods _ id,images,indexes,spec,price,size,bkge_scale,team_scale,direct_scale,enable,create_time,update_time)每个集合的值= param 1 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= insert batch useGeneratedKeys= true key property= goodskudtos。“id”插入到商品_ SKU(商品_ id,图像,索引,规格,价格,尺寸,bkge_scale,团队_scale,direct_scale,enable,create_time,update_time)每个集合的值= param 1 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依赖版本:
附上完整的制图人以及可扩展标记语言文件
GoodsSkuMapper.java
int insert batch(@ Param( goodskudtos )lisgoodskudto goodskudtos,@Param(goodsId) Long goodsId,@ Param( Date )Date Date);GoodsSkuMapper.xml
insert id= insert batch useGeneratedKeys= true key property= goodskudtos。“id”插入商品_ SKU(商品_ id,图像,索引,规格,价格,尺寸,bkge_scale,团队_scale,direct_scale,enable,create_time,update_time)每个集合的值= param 1 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到此这篇关于框架批量插入并返回主键编号的方法的文章就介绍到这了,更多相关框架批量插入返回主键内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。