2月18日,mybatis3.3.1解决了此问题。好开心,省了多余的查询了。
自己测试了一下。
例子表:
CREATE TABLE `user` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(16) NULL COMMENT '名称',
PRIMARY KEY (`id`));
POM 依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.4</version>
</dependency>
XML代码部分:
<insert id="addUserBatch" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user(name)
VALUES
<foreach collection="list" index="index" item="item" open=" " separator="," close=" ">
( #{item.name})
</foreach>
</insert>
注意:入参集合请使用“collection”、“list”或者“array”。
原因查看Mybatis更新记录:
private Collection<Object> getParameters(Object parameter) {
Collection<Object> parameters = null;
if (parameter instanceof Collection) {
parameters = (Collection) parameter;
} else if (parameter instanceof Map) {
Map parameterMap = (Map) parameter;
// when you insert a List(or Array).
// If you want retrieve the auto-increment value or default value.
// You should not to use @Param annotations, You must use a single parameter(List or Array).
if (parameterMap.containsKey("collection")) {
parameters = (Collection) parameterMap.get("collection");
} else if (parameterMap.containsKey("list")) {
parameters = (List) parameterMap.get("list");
} else if (parameterMap.containsKey("array")) {
parameters = Arrays.asList((Object[]) parameterMap.get("array"));
}
}
if (parameters == null) {
parameters = new ArrayList<Object>();
parameters.add(parameter);
}
return parameters;
}
MyBatis批量插入优化
本文介绍如何利用MyBatis 3.3.1版本解决批量插入时的效率问题,并提供具体的实现代码示例,包括POM依赖配置及XML映射文件的编写。
7999

被折叠的 条评论
为什么被折叠?



