关于 Mybatis 的 foreach 拼接超长问题
1、xml 脚本
<insert id="insertUser" parameterType="java.util.List">
insert into t_user
VALUES
<foreach collection="list" item="item" separator=",">
(
#{
item.userId},
#{
item.userName},
#{
item.userAge},
#{
item.createTime},
#{
item.updateTime}
)
</foreach>
</insert>
2、Dao 层接口
@Mapper
public interface UserDao extends BaseMapper<User> {
void insertUser(@Param("list") List list);
}
3、Service 层代码
if (userList != null && userList.size() > 0) {
// 这里做分步插入,数据量过大 mybatis foreach 拼接会有问题
double product = (double)userList .size() / 2000;
int index = (int)Math.ceil(product); // 向上取整
for (int i=0;i < index;i++){
//stream流表达式,skip表示跳过前i*2000条记录,limit表示读取当前流的前2000条记录
userDao.insertUser(userList.stream().skip(i*2000).limit(2000).collect(Collectors.toList()));
}
}
.