不在傻傻for循环!完美解决JPA批量插入问题

前言:jpa在简单的增删改查方面确实帮助我们节省了大部分时间,但是面对复杂的情况就显得心有余而力不足了,最近遇到一个批量插入的情况,jpa虽然提供了saveAll方法,但是底层还是for循环save,如果遇到大量数据插入频繁与数据库交互必然会对性能造成影响,查阅了很多资料也没有一个满意的结果,最后还是自己想出了一个方案
mysql是支持insert多个values的,所以我的思路就是拼sql然后利用SpringJdbcTemplate的excute方法执行原始sql,直接一次性插入,附上源码

StringBuilder insert = new StringBuilder("INSERT INTO `user_message` (`created_at`, `is_deleted`, `content`,`send_tm`,`status`,`type`,`user_id`) VALUES ");
        for (int i = 0; i < users.size(); i++) {
            insert.append("(").append("NOW()").append(",0,").append("'").append(content).append("'").append(",").append("'").append(format).append("'").append(",0,").append(type).append(",").append(users.get(i)).append(")");
            if (i < users.size() - 1) {
                insert.append(",");
            }
        }
        log.info("SQL语句:{}", JSON.toJSON(insert));
        try {
            jdbcTemplate.execute(insert.toString());
            return true;
        } catch (Exception e) {
            throw new BizException("sql解析错误");
        }

拼出来的sql语句

INSERT INTO `user_message` (`created_at`, `is_deleted`, `content`,`send_tm`,`status`,`type`,`user_id`) VALUES (NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,1),(NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,2),(NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,3),(NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,4),(NOW(),0,'fdsfadsfdaf','2019-12-18',0,8,5)

在这里插入图片描述
成功插入

这里只是把关键部分贴出来,了解思路就好

发布了25 篇原创文章 · 获赞 22 · 访问量 3642

猜你喜欢

转载自blog.csdn.net/weixin_42443419/article/details/103602987
今日推荐