MybatisPlus——批量新增

MybatisPlus——批量新增

第一种:利用for循环遍历每条插入数据,逐条插入

    @Test
    void testSaveBatch() {
        // for循环插入一万条数据
        for (int i = 0; i < 10000; i++) {
            User user = new User();
            user.setUserName("张三" + i);
            user.setPassword("123456");
            user.setAge(18);
            user.setSalary(1000.0f);
            userService.save(user);
        }
    }

缺点:每插入一次,就会生成一条插入语句,极其耗时

 

第二种:MP的批量新增,将数据存放到list集合中,每当list中有一百条数据就进行一次插入,插入一百次

    @Test
    void testSaveBatch2() {
        // 1000条数据的集合
        List<User> users = new ArrayList<User>(1000);
        for (int i = 0; i < 100000; i++) {
            users.add(new User("张三" + i, "123456", 18, 1000.0f));
            if (users.size() == 1000) {
                userService.saveBatch(users);
                users.clear();
            }
        }

    }

缺点:因为每次的插入数量的限制,这就会在预编译的批处理产生一百条插入语句,也很耗时

 

第三种:配置rewriteBatchedStatements,性能最好的

要想只编译为一条sql语句,就要和这样插入语句一样

    <insert id="">
        insert into a_user(userName,password,age,salary)
        values
        (#{userName},#{password},#{age},#{salary}),
        (#{userName},#{password},#{age},#{salary}),
        (#{userName},#{password},#{age},#{salary}),
        (#{userName},#{password},#{age},#{salary});
    </insert>

在yml的jdbc的配置上加入一个rewriteBatchedStatements=true

 

 再次执行这段代码,运行时间缩短很多

    @Test
    void testSaveBatch2() {
        // 1000条数据的集合
        List<User> users = new ArrayList<User>(1000);
        for (int i = 0; i < 100000; i++) {
            users.add(new User("张三" + i, "123456", 18, 1000.0f));
            if (users.size() == 1000) {
                userService.saveBatch(users);
                users.clear();
            }
        }

    }

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值