有个功能需要做个批量插入,表是自增主键,本来是很简单的事情,结果一测试发现一个神奇的事情,由于数据库是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
另:如果有更好的解决方式了,欢迎大佬在底下留言,感激不尽。