首页 > 其他分享 >批量操作工具

批量操作工具

时间:2024-11-28 11:56:08浏览次数:7  
标签:orderId sendCards 批量 dataList param 操作 工具 size

批量操作工具

背景 比如有时候csv 或者 excel 导入了一批数据,然后想着 每次1000 条操作一次数据库

/**
 * @description:
 * @author: lyc
 * @date: 2024/4/12 15:13
 **/
public class BatchHandleUtils {

    /**
     * 一次性读取文档  批量处理数据 入库
     * @param batchSize 批量大小
     * @param dataList 数据
     * @param function 转换函数
     * @param consumer 消费数据
     * @param <T>
     * @param <R>
     */
    public static <T, R> void batch(Integer batchSize, List<T> dataList, Function<T, R> function, Consumer<List<R>> consumer) {
        if (CollectionUtil.isEmpty(dataList)) {
            return;
        }
        int size = dataList.size();
        int totalPage = PageUtil.totalPage(size, batchSize);
        for (int i = 1, index = 0; i <= totalPage; i++, index += batchSize) {
            // 一次批量处理的数据
            List batchData = Lists.newArrayListWithCapacity(batchSize);
            for (int j = index; j < ((index + batchSize) > size ? size : (index + batchSize)); j++) {
                T data = dataList.get(j);
                R result = function.apply(data);
                batchData.add(result);
            }
            consumer.accept(batchData);
        }
    }
}

使用

CsvReader reader = CsvUtil.getReader();
//从文件中读取CSV数据
List<CardRollCsvBO> cardRollCsvBOList = reader.read(
        ResourceUtil.getReader(localFile, Charset.forName(Constants.CHARSET_GBK)), CardRollCsvBO.class);
//一次500 批量插入
BatchHandleUtils.batch(Constants.BATCH_HANDLE_DATA_SIZE, cardRollCsvBOList, (cardRollCsvBO) -> {
    SendCards sendCards = new SendCards();
    BeanUtils.copyProperties(cardRollCsvBO, sendCards);
    String orderId = cardRollCsvBO.getOrderId();
    if (StringUtils.isNotBlank(orderId) && orderId.indexOf("=") != -1) {
        sendCards.setOrderId(orderId.substring(orderId.indexOf("=") + 2, orderId.lastIndexOf("\"")));
    }
    return sendCards;
}, (dataList) -> sendCardsService.addBatch(dataList));

标签:orderId,sendCards,批量,dataList,param,操作,工具,size
From: https://www.cnblogs.com/lyc88/p/18574006

相关文章

  • 批量操作DB
    批量操作DB记录一次批量操作数据库,sqlServer服务器参数过多问题。1.案例引入对接另一个批发系统B,B需要把订单那些数据弄到系统A中。就是一个批量插入,批量更新的问题。系统保密需要,本文只做示例,具体代码都是模拟的。(SpringBoot项目)涉及到的操作类和数据库表Order_master表......
  • 【2024寒假全新】渗透测试工具大全(超详细),收藏这一篇就够了!
     黑客/网安大礼包:......
  • 【2024寒假全新】渗透测试工具大全(超详细),收藏这一篇就够了!
     黑客/网安大礼包:......
  • Oracle生成awr报告操作步骤
    1、cmd命令窗口 以sysdba身份登录Oracle 2、执行@?/rdbms/admin/awrrpt命令,并选择报告类型为HTML。输入天数以选择生成报告的时间段,一般默认为最近7天。输入报告开始和结束时间对应的快照ID。输入报告名称,如awr.html,系统将自动生成并显示报告名。 3.查看AWR报告。AWR报告......
  • AI文本生成视频工具CogVideoX部署到华为昇腾NPU的详细步骤
    CogVideoX是智谱AI开发的视频生成大模型。无需复杂的视频制作技能和工具,能够将文本描述或静态图片转化为高质量、具有视觉吸引力的动态视频。https://github.com/THUDM/CogVideo 一、部署到昇腾NPU昇腾环境:芯片类型:昇腾910B3CANN版本:CANN7.0.1.5驱动版本:23.0.6操作系......
  • playwright-命令行工具
    脚本录制在命令行窗口使用如下语法格式进行脚本录制:npxplaywrightcodegen[options][url]options参数:-o,--output:保存生成脚本--target:生成的脚本语言,可以设置javascript,test,python,python-async和csharp,默认为python。-b,--browser:要使用的浏览器,可以选......
  • 【计算机视觉】图像基本操作
    图像基本操作数字图像表示一幅尺寸为M·N的图像可以用矩阵表示,每个矩阵元素代表一个像素,元素的值代表这个位置图像的亮度;其中,彩色图像使用3维矩阵M·N·3表示;对于图像显示来说,一般使用无符号8位整数来表示图像亮度,取值范围[0,255]图像数据按照自左向右、自上向下的顺......
  • Linux操作系统3:用户,用户组,权限
    Linux用户,用户组,权限用户和用户组基础1.计算机通过用户名和密码识别用户;2.Linux中新建用户后,需要设置密码;3.系统中有一个特殊的用户root;4.用户组:把几个用户归在一起,这样的组被称之为用户组,规定文件所属用户组的权限可以使该组所有成员拥有这些权限。普通用户和最高管......
  • ScanState 和 LoadState 是 Microsoft 提供的用户状态迁移工具(USMT)中的两个核心命令行
    常见迁移方案|MicrosoftLearn计划为大量计算机升级硬件和/或操作系统时,可以使用用户状态迁移工具UserStateMigrationTool(USMT)。USMT(UserStateMigrationTool)通过从源计算机捕获以下用户的项来管理最终用户数字标识的迁移:操作系统设置。应用程序设置。个人文件......
  • 文件操作.C
    一、文件如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件磁盘(硬盘)上的⽂件是⽂件但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件......