原生批量插入分片实现
那接下来,就是改造我们的 MyBatis 批量插入代码了,具体实现如下:
@Test void saveBatchByNativePartition() { long stime = System.currentTimeMillis(); // 统计开始时间 List<User> list = new ArrayList<>(); // 构建插入数据 for (int i = 0; i < MAXCOUNT; i++) { User user = new User(); user.setName("test:" + i); user.setPassword("123456"); list.add(user); } // 分片批量插入 int count = (int) Math.ceil(MAXCOUNT / 1000.0); // 分为 n 份,每份 1000 条 List<List<User>> listPartition = Lists.partition(list, count); // 分片批量插入 for (List<User> item : listPartition) { userService.saveBatchByNative(item); } long etime = System.currentTimeMillis(); // 统计结束时间 System.out.println("执行时间:" + (etime - stime)); }
执行以上程序,最终的执行结果如下:
从上图可以看出,之前批量插入时的异常报错不见了,并且此实现方式的执行效率竟比 MyBatis Plus 的批量插入的执行效率要高,MyBatis Plus 批量插入 10W 条数据的执行时间如下: