mybatis批量插入数据时,如果是sql server库只返回一条自增主键

有个功能需要做个批量插入,表是自增主键,本来是很简单的事情,结果一测试发现一个神奇的事情,由于数据库是sql server的,插入一条时,id可以正常返回,多条时,就出现了标题的问题,只返回一个id,使用的是mybatis自带的jar包,甚至如何使用人家还加了备注在里面,很清晰,是这样的:
在这里插入图片描述

然后我就按照上面描述的,自己加了一个自定义的Mapper,把主键名称改成我自己的,然后发现依然只能获取到一条,后来各种查资料,发现对于sql
server的批量新增,确实是只能返回一条数据,这是JDBC和sql server整合时就有的问题,因为jdbc3KeyGenerator中 getGeneratedKeys(),在数据库是sql server时只返回了一个结果id,不支持多行,这是在一个问答贴子下扒的大佬的回答:(ps:英文的,手动翻译)
在这里插入图片描述

我的最后解决方法:由于这个表字段较多(大概四五十个字段)通过在xml中手写sql的方式再去修改太耗时,因此改为循环单个插入(主要还是数据量少一次几乎不会超过20条),这样就能从每一个entity里通过getId()获取到主键id的值(插入完成后会自动set entity的主键值),但批量插入多的慎用还是手动写sql比较好,也就是下另一种解决方法,通过output的形式 返回一个List,但需要手动写insert语句,,具体见大佬的贴子: https://www.jianshu.com/p/01e45e1c9adb
另:如果有更好的解决方式了,欢迎大佬在底下留言,感激不尽。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值