背景
今日,注意到mybatis3.3.1正式发布,果断查看了更新内容(传送门)。大致浏览了下,其中有一项喜人的改进:
Support insert multiple rows and write-back id
批量插入支持id回写了!我们知道,以往如果批量插入,需要获取插入后的ids,是需要根据特定条件反查的。但是,有了这个特性了,完全省去了这一多余查询过程。
实践
迫不及待的试了一把。代码如下:
pom依赖:
|
|
mapper interface:
|
|
mapper xml:
|
|
测试类:
|
|
然而,测试类结果直接报错:
|
|
跟踪这项修改的提交记录(传送门)
发现src/main/java/org/apache/ibatis/executor/keygen/Jdbc3KeyGenerator.java
的修改记录:
|
|
也就是说入参的集合名称必须叫“collection”、“list”、“array”才会生效哦!
修改代码,mapper interface:
|
|
mapper xml:
|
|
重新运行测试类,成功!
思考
mybatis这项修改的原理就是,当集合或者数组的parameter名称为“collection”、“list”、“array”,同时设置了useGeneratedKeys=”true” ,就会把生成的id值回写到对应集合或者数组中的实体中。
但是通过parameter名称区别是否回写总是不太优雅,个人感觉应该新增一个注解,添加在相应的集合或者数组上,标示这是一个批量插入的实体,是需要回写id到这里的。
总而言之,这是一个方便大家的改动,enjoy吧~