1.准备数据
//User详情数据
List<User> details = new ArrayList<>();
2.处理数据并批量插入
//向上取整(避免数据丢失)
int result = (int) Math.ceil((double) details.size() / 100);
//每次插入100条
Stream.iterate(0, n -> n + 1).limit(result).parallel()
.map(n -> details.stream()
.skip(n *100).limit(100).collect(Collectors.toList()))
.forEach(d -> userMapper.insertBatch(d));
注意事项:parallel 并行提高插入速度,可能会导致Mysql异常:Lock wait timeout,注意表结构.
3.编写sql语句
@Insert("<script> " +
"insert into tb_user " +
"(id,age,sex) values" +
"<foreach collection='details' item = 'item' separator = ','> " +
"(#{item.id},#{item.age},#{item.sex})" +
"</foreach>" +
"</script> ")
void insertBatch(@Param("details") List<User> details);
至此使用Mybatis批量插入操作完成