对分库分表进行批量操作

news2024/7/6 18:14:23

对ShardingJDBC基础了解:https://blog.csdn.net/m0_63297646/article/details/131894472

对批量操作案例:https://blog.csdn.net/m0_63297646/article/details/131843517

分为db0和db1两个库,每个库都有三张订单表,分表键根据年份【year】,分库键根据店铺id【store_id】

在db0中存在两张学生信息表,分表键根据年份【year】

一、插入

插入时,对象要带有分库/分表键的值,shardingJdbc会进行改写。一次性插入。

1、分表未分库

 2、分库分表

二、更新

代码简单,但是会增加逻辑。 

db0和db1都会执行,且因为店铺id集合包含两个库的数据,所有的订单都会在两个库重复执行。

建议:在stream所有店铺id时,可以加一个distinct,避免大量重复数据。

@Test
void test15() {
    //分库分表键全作为参数,则全部都要执行一遍。
    List<OrderDO> orderDOList = orderMapper.selectList(null);
    System.out.println(Objects.isNull(orderDOList));
    List<Long> collect = orderDOList.stream().map(obj -> obj.getStoreId()).distinct().collect(Collectors.toList());
    List<Long> collect1 = orderDOList.stream().map(obj -> obj.getId()).distinct().collect(Collectors.toList());
    orderMapper.updateBatchOrderDoList(collect,
            collect1,
            CommonUtil.getYearList()
    );
}


void updateBatchOrderDoList(@Param("store_id_list")List<Long> storeIdList,
                            @Param("order_id_list")List<Long> orderIdList,
                            @Param("year_list")List<Integer> yearList);


<update id="updateBatchOrderDoList">
    UPDATE
    t_order bo
    SET
     no='2222222'
    <where>
        <foreach collection="year_list" separator="," item="item" open=" AND bo.year IN (" close=")">
            #{item}
        </foreach>
        <foreach collection="order_id_list" item="item" separator="," open=" AND bo.id IN (" close=")">
            #{item}
        </foreach>
        <foreach collection="store_id_list" item="item" separator="," open=" AND bo.store_id IN (" close=")">
            #{item}
        </foreach>
    </where>
</update>

1、分库分表

根据分库键【store_id】分为两个list,分别更新。

public static <T> void splitAndProcess(List<T> sourceList, Predicate<T> condition, Consumer<List<T>> action) {
    List<T> matchingItems = new ArrayList<>();
    List<T> nonMatchingItems = new ArrayList<>();

    for (T obj : sourceList) {
        if (condition.test(obj)) {
            matchingItems.add(obj);
        } else {
            nonMatchingItems.add(obj);
        }
    }

    action.accept(matchingItems);
    action.accept(nonMatchingItems);
}
splitAndProcess(orderDOList, obj -> obj.getStoreId() % 2 == 0, splitList -> {
    orderMapper.batchUpdate(splitList);
});

注意:如果使用下面这种sql方式,需要更新0库1库两个库的数据,路由只会进入一个更新,导致没有所有的数据更新。

<update id="batchUpdate">
    <foreach collection="list" item="vo" index="idx" separator=";">
        update
        <if test="idx > 0">
            t_order_${vo.year}
        </if>
        <if test="idx == 0">
            t_order
        </if>
        set no=3
        where id = #{vo.id} and year = #{vo.year} and store_id=#{vo.storeId}
    </foreach>
</update>

2、分表未分库

如果是统一的数据更新,比如student表,更新所有学生的name为‘张三’,可以直接用updateById。

使用sql语句话

<update id="updateStduent">
    update
        s_stduent
    set
       age = age + 1
    <where>
        id=#{id}
        <foreach collection="year_list" item="item" separator="," open=" AND year IN (" close=")">
            #{item}
        </foreach>
    </where>
</update>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/953535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

核心交换机的六个基础知识

中午好&#xff0c;我的网工朋友 今天来聊聊核心交换机啊。 首先你要明确一个概念&#xff0c;接入层交换机、汇聚层交换机、核心层交换机并非是交换机的种类或者属性&#xff0c;只是由其所执行的任务来划分的。 从网络拓扑结构来讲&#xff0c;一个计算机网络系统结构需采用…

Soul的社交元宇宙之路,还有多远?

在元宇宙概念爆火的当下&#xff0c;以互联网为依托的虚拟社交逐步为用户承载起其空缺的精神交流与寄托&#xff0c;而在这其中&#xff0c;以“跟随灵魂找到你”为Slogan&#xff0c;主打年轻人社交元宇宙平台的APP--Soul则在这条赛道上凭借着独特的风格&#xff0c;逐步突出重…

Elasticsearch 7.6 - APi基础操作篇

ES7.6-APi基础操作篇 前言相关知识索引相关创建索引查询索引查询所有索引删除索引关闭与打开索引关闭索引打开索引 冻结与解冻索引冻结索引解冻索引 映射相关创建映射查看映射新增字段映射 文档相关(CURD)新增文档根据ID查询修改文档全量覆盖根据ID选择性修改根据条件批量更新 …

移动数据安全案例(MAG)| 好的方案是恰到好处的平衡

某基金公司是由国有商业银行直接发起设立并控股的合资基金管理公司&#xff0c;服务于超过5000万客户&#xff0c;其资产管理规模近2万亿。作为国内头部基金公司&#xff0c;在网络安全和数据安全的建设上已经非常完善。目前已在办公网敏感数据的创建、流转、存储等数据安全生命…

Python钢筋混凝土结构计算.pdf-混凝土构件计算

计算原理&#xff1a; 代码实现&#xff1a; #钢筋混凝土参数 def c_hrb(): global fcuk,HRB,Ec,fc,ft,ftk,Es,fy,fyp,fyk global a1,epsilon_cu fcukEcfcftftk0.0 HRBEsfyfypfyk0.0 #矩形应力图系数a1&#xff0c;C50以下为1.0 a11.0 #正截面混凝土极限压应变epsilon_cu&#…

IP网络广播系统有哪些优点

IP网络广播系统有哪些优点 IP网络广播系统有哪些优点&#xff1f; IP网络广播系统是基于 TCP/IP 协议的公共广播系统&#xff0c;采用 IP 局域网或 广域网作为数据传输平台&#xff0c;扩展了公共广播系统的应用范围。随着局域网络和 网络的发展 , 使网络广播的普及变为可能 …

透过康希诺,谈谈疫苗这个行业

这两天疫苗企业的财报陆续发布了&#xff0c;国外的辉瑞和默沙东&#xff0c;国内像康希诺、智飞生物这些&#xff0c;8月30日&#xff0c;康希诺公布2023年半年报&#xff1a;实现总收入2590.78万元&#xff0c;归母净利润亏损8.41亿元&#xff0c;主要系由于新冠疫苗产品需求…

【LeetCode题目详解】第九章 动态规划part01 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 (day38补)

本文章代码以c为例&#xff01; 一、力扣第509题&#xff1a;斐波那契数 题目&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a…

21.CSS的动态圆形进度条

效果 源码 <!doctype html> <html><head><meta charset="utf-8"><title>Animated Circular Progress | CSS Only</title><link rel="stylesheet" href="style.css"></head><body><di…

【前端demo】CSS border-radius可视化 原生实现

文章目录 效果原理代码 前端demo系列目录&#xff1a;https://blog.csdn.net/karshey/article/details/132585901 效果 参考&#xff1a; Fancy Border Radius Generator (9elements.github.io) https://border-radius.com/ CSS border-radius 新玩法(含可视化生成工具) - …

【实战】十一、看板页面及任务组页面开发(六) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十八)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

【LeetCode-中等题】437. 路径总和 III

文章目录 题目方法一&#xff1a;迭代层序 每层节点dfs 维护一个count变量 题目 方法一&#xff1a;迭代层序 每层节点dfs 维护一个count变量 思路&#xff1a; 层序遍历每一个节点遍历一个节点就对这个节点进行dfsdfs的同时&#xff0c;维护一个count变量&#xff0c;并且…

vue v-on 艾特@

vue v-on 内联代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…

恢复已删除的git分支

1.打开对应项目文件夹目录,在目录下执行git命令 2.执行命令 git reflog --dateiso , 找到最后一次commit 的id 3. 执行git checkout -b 新建分支名称 commitId 就会基于commitId这次提交时工作区新建一个分支&#xff0c;就能达到我们找到删除分支的代码效果。 4.直接看ide…

静态路由配置实验(超详细讲解+详细命令行)

系列文章目录 华为数通学习&#xff08;7&#xff09; 前言 一&#xff0c;静态路由配置 二&#xff0c;网络地址配置 AR1的配置&#xff1a; AR2的配置&#xff1a; AR3的配置&#xff1a; 三&#xff0c;测试是否连通 AR1的配置: 讲解&#xff1a; AR2的配置&#…

由于启动计算机时出现了页面文件配置问题,Windows在您的计算机创建了一个临时页面文件...

问题来源&#xff1a;D盘存储空间爆满以后&#xff0c;每次开机电脑开始自动弹窗。 提示信息&#xff1a; 可以点击确定&#xff0c;win10直接跳出虚拟内存设置窗口&#xff0c;如下 选择勾选“自动管理所有驱动器的分页文件大小”&#xff0c;点击确定&#xff0c;没有再弹窗。…

Kubernetes(k8s)上安装Prometheus和Grafana监控

Kubernetes上安装Prometheus和Grafana监控 环境准备Kubernetes准备 安装项目开始安装下载安装的项目安装项目替换镜像替换kube-state-metrics替换prometheus-adapter 修改Service修改alertmanager-service.yaml修改grafana-service.yaml修改prometheus-service.yaml 执行这些ya…

1.10 内存ShellCode注入与格式化

ShellCode 的格式化与注入功能在实战应用中也尤为重要&#xff0c;格式化Shellcode是指将其转换为可执行的二进制格式&#xff0c;使其能够在内存中运行。注入Shellcode是指将格式化的Shellcode注入到另一个进程的内存中&#xff0c;以便在该进程中执行&#xff0c;此类功能也可…

【人工智能】—_逻辑Agent、一般逻辑、Entailment_蕴涵、命题逻辑、前向链接、反向链接、Resolution归结

文章目录 逻辑智能体Knowledge bases一个简单的基于知识的智能体 一般逻辑Entailment 蕴涵Models模型蕴涵与推理 命题逻辑逻辑连接词枚举推理有效性可满足性 推导和证明霍恩子句Forward chaining 前向链接Proof of completeness&#xff08;完备性&#xff09; Backward chaini…

ELK安装、部署、调试 (七)kibana的安装与配置

1.介绍 Kibana 是一个基于浏览器的开源可视化工具&#xff0c;主要用于分析大量日志&#xff0c;以折线图、条形图、饼图、热图、区域图、坐标图、仪表、目标、时间等形式。预测或查看输入源的错误或其他重大事件趋势的变化。Kibana 与 Elasticsearch 和 Logstash 同步工作&am…