jdbctemplate数据批量入库

代码

相比于数据一条一条入库,批量入库效率更高,不过需要注意批量入库数据量大小需要控制好,1千到2千条数据入库较快,超过两千条数据入库较慢。

@Test
    void pltest() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydata?serverTimezone=UTC");
        dataSource.setUsername("xxx");
        dataSource.setPassword("xxx");
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        //批量添加
        List<Object[]> batchArgs = new ArrayList<>();
       /* Object[] o1={1,"python","xyxy"};
        Object[] o2={2,"C++","Baba"};
        Object[] o3={3,"Go","Mama"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3);*/
        for (int i = 0; i < 2000; i++) {
            Object[] o = {1, "python" + i, "xyxy" + i};
            batchArgs.add(o);
        }
        //调用批量添加
        String sql = "insert into user values(?,?,?)";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        System.out.println(Arrays.toString(ints));
    }

在这里插入图片描述

参考文章

https://www.cnblogs.com/Aikz/p/15634606.html

实现数据分批入库

/**
     * 数据分批入数据库
     */
    @Test
    void pltest2() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/gzw?serverTimezone=UTC");
        dataSource.setUsername("root");
        dataSource.setPassword("abcd19971120");
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        //每次入库条数设置
        int size = 1000;
        //总入库数
        int all = 1000;
        List<Object[]> batchArgs = new ArrayList<>();
        long start = System.currentTimeMillis();
        for (int i = 0; i < all; i++) {
            //批量添加
            Object[] o = {i, "python" + i, "xyxy" + i};
            batchArgs.add(o);
            //最后一个是size>all入库条件
            if (batchArgs.size() >= size || i == all || (size > all && i == all - 1)) {
                //调用批量添加
                String sql = "insert into user values(?,?,?)";
                int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
                long end = System.currentTimeMillis();
                String format = df.format((double) (i + 1) / all);
                System.out.println(i + 1 + " , " + format + " , " + (double) (end - start) / 1000
                        + "秒 速度:" + df.format((double) all / (end - start) * 1000) + "条/秒");
                batchArgs.clear();
            }
        }
        long last = System.currentTimeMillis();
        System.out.println("入库完成:用时" + df.format((double) (last - start) / 1000)
                + "秒  速度:" + df.format((double) all / (last - start) * 1000) + "条/秒");

    }

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值