Java实现Mysql批量插入与更新

第一、批量插入语句

java 复制代码
    @Insert({"<script>",
            "INSERT INTO TABLE_NAME ("
                    + "ID,"
                    + "IS_DELETE,"
                    + "GMT_CREATE,"
                    + "GMT_MODIFIED"
                    + ")VALUES",
            "<foreach collection = 'list' item = 'item' separator = ','>",
            "(" + "#{item.id},"
                    + "0,"
                    + "now(),"
                    + "now()"
                    + ")",
            "</foreach>",
            "</script>"})

第二、批量更新语句

java 复制代码
    @Update("<script>"
            + " UPDATE TABLE_NAME SET "
    		+ " <trim prefix='OWNER_ID =case' suffix='end,'> "
            +" <foreach collection='list' item='item'> "
            + " when ID = #{item.id} then #{item.ownerId} "
            + " </foreach> "
            +" </trim> "
            + " GMT_MODIFIED = NOW() "
            + " WHERE ID in "
            +" <foreach collection='list' index='index' item='item' separator=',' open='(' close=')'> "
            +" #{item.id} "
            +" </foreach> "
            + " </script>")

第三,工具类

java 复制代码
public final class BatchHandler {
    private static final int BATCH_OPERATE_SIZE = 500;
    public static <T> void doBatch(List<T> coll,Consumer<Collection<T>> consumer) {
        doBatch(coll, BATCH_OPERATE_SIZE, consumer);
    }
    /**
     * @param coll:             分片集合
     * @param batchOperateSize: 分片size
     * @param consumer:         批量消费过程
     * @description 集合分片处理
     */
    public static <T> void doBatch(List<T> coll,Integer batchOperateSize,Consumer<Collection<T>> consumer) {
        for (int i = 0; i < coll.size(); i += batchOperateSize) {
            if (i + batchOperateSize > coll.size()) {
                consumer.accept(coll.subList(i, coll.size()));
            } else {
                consumer.accept(coll.subList(i, i + batchOperateSize));
            }
        }
    }
}

第四、调用方式

java 复制代码
BatchHandler.doBatch(list, paramList -> service.batchAdd((List<Object>) paramList));

欢迎大家积极留言交流学习心得,点赞的人最美丽!

相关推荐
龙虾PRO6 分钟前
能源与股票量化核心差异,AI全链路落地实操手册
java·面试·职场和发展
llwszx18 分钟前
【Java/Go后端手撸原生Agent(第九篇):Plan-and-Execute规划模式——从“走一步看一步“到“先谋后动“】
java·python·golang·agent开发·plan模式·规划执行模式
ZJH__GO28 分钟前
网络编程v2--多客户端互通
java·运维·服务器·开发语言·计算机网络
霸道流氓气质40 分钟前
SpringBoot中基于 AES-GCM + KMS 密钥管理的数据加解密 Starter 实践
java·数据库·spring boot
Gofarlic_OMS1 小时前
NX浮动许可调度黑名单机制,对比两款谁更合理
java·大数据·运维·开源·制造
乐观的Terry1 小时前
8、发布系统-完整流水线的核心
java·spring boot·spring·spring cloud
Alexalbb1 小时前
从角色过滤到可审计授权:单体系统数据权限设计复盘与演进
java
番茄炒鸡蛋加糖1 小时前
MySQL 实战调优& 分表基础
数据库·mysql
万亿少女的梦1682 小时前
基于Spring Boot的游戏交易管理系统设计与实现
java·spring boot·mysql·系统设计·交易管理
Database_Cool_2 小时前
云数据库如何保证高可用、故障了怎么办:阿里云 RDS MySQL 高可用架构详解
数据库·mysql·阿里云