关于 Mybatis 的 foreach 拼接超长问题

关于 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()));
  }
}  

 
 
 
 
 
 
 
.

猜你喜欢

转载自blog.csdn.net/weixin_41922349/article/details/108821635