java:使用shardingSphere访问mysql的分库分表数据
# 创建分库与分表
创建两个数据库【order_db_1、order_db_2】。
然后在两个数据库下分别创建三个表【orders_1、orders_2、orders_3】。
建表sql请参考:
CREATE TABLE `orders_1` (`id` bigint NOT NULL,`order_type` varchar(255) NULL DEFAULT NULL,`customer_id` bigint NULL DEFAULT NULL,`amount` double NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
)
ENGINE = InnoDB
# 下面开始写测试代码:
【pom.xml】
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.3.12.RELEASE</version>
</dependency>
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.1</version>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-core</artifactId><version>3.4.3.1</version>
</dependency>
<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.1.1</version>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.22</version>
</dependency>
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version>
</dependency>
<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.49</version>
</dependency>
【application.properties】
server.port=8080
spring.application.name=myShardingSpheremanagement.server.port=8080
management.endpoints.web.exposure.include=*########################################management.health.db.enabled=false
management.health.elasticsearch.enabled=falsemybatis-plus.mapper-locations=classpath:mapper/*.xml
mybatis-plus.type-aliases-package=test/persistence/mapper##########################################################spring.shardingsphere.datasource.names=ds-order-db-1, ds-order-db-2######################################################
# 数据源spring.shardingsphere.datasource.ds-order-db-1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds-order-db-1.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds-order-db-1.url=jdbc:mysql://192.168.44.228:3306/order_db_1
spring.shardingsphere.datasource.ds-order-db-1.username=root
spring.shardingsphere.datasource.ds-order-db-1.password=rootspring.shardingsphere.datasource.ds-order-db-2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds-order-db-2.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds-order-db-2.url=jdbc:mysql://192.168.44.228:3306/order_db_2
spring.shardingsphere.datasource.ds-order-db-2.username=root
spring.shardingsphere.datasource.ds-order-db-2.password=root#################################################
# tablespring.shardingsphere.sharding.tables.orders.actual-data-nodes=ds-order-db-${1..2}.orders_${1..3}spring.shardingsphere.sharding.tables.orders.database-strategy.inline.sharding-column=customer_id
spring.shardingsphere.sharding.tables.orders.database-strategy.inline.algorithm-expression=ds-order-db-$->{customer_id % 2 + 1}spring.shardingsphere.sharding.tables.orders.table-strategy.inline.sharding-column=customer_id
spring.shardingsphere.sharding.tables.orders.table-strategy.inline.algorithm-expression=orders_${customer_id % 3 + 1}##################################################spring.shardingsphere.props.sql.show=true################################################
【mapper/OrdersMapper.xml】
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chz.myShardingSphere.persistence.mapper.OrdersMapper"><resultMap id="orders" type="com.chz.myShardingSphere.persistence.po.Orders"><id column="id" property="id" /><result column="orderType" property="order_type" /><result column="customerId" property="customer_id" /><result column="amount" property="amount" /></resultMap><select id="testSelectOrder" parameterType="long" resultMap="orders">SELECT *FROM orders<where><if test="customerId!=null">and customer_id = #{customerId}</if></where>order by idLIMIT 10 OFFSET 0</select></mapper>
【TestController.java】
package com.chz.myShardingSphere.controller;@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {@Value("${spring.application.name}")private String applicationName;@Autowiredprivate TestService testService;@GetMapping("/testAddOrder")public String testAddOrder(@RequestParam(value = "id", defaultValue = "1") Long id) {testService.testAddOrder(id);return "testAddOrder";}@GetMapping("/testSelectOrder")public String testSelectOrder(@RequestParam(value = "customerId", required = false) Long customerId) {List<Orders> orders = testService.testSelectOrder(customerId);return JSON.toJSONString(orders);}@GetMapping("/testDeleteOrder")public String testDeleteOrder() {testService.testDeleteOrder();return "success";}
}
【OrdersMapper.java】
package com.chz.myShardingSphere.persistence.mapper;@Repository
@Mapper
public interface OrdersMapper extends BaseMapper<Orders>
{List<Orders> testSelectOrder(@Param("customerId") Long customerId);
}
【Orders.java】
package com.chz.myShardingSphere.persistence.po;@Getter
@Setter
public class Orders {private Long id;private Long orderType;private Long customerId;private Double amount;@Overridepublic String toString() {return "Orders{" +"id=" + id +", orderType=" + orderType +", customerId=" + customerId +", amount=" + amount +'}';}
}
【TestService.java】
package com.chz.myShardingSphere.server;@Service
public class TestService {@Autowiredprivate OrdersMapper ordersMapper;@Transactionalpublic void testAddOrder(long id){Orders orders = new Orders();orders.setId(id);orders.setCustomerId(id);orders.setOrderType(id);orders.setAmount((double)id);ordersMapper.insert(orders);}@Transactionalpublic List<Orders> testSelectOrder(Long customerId){List<Orders> orders = ordersMapper.testSelectOrder(customerId);return orders;}@Transactionalpublic void testDeleteOrder(){LambdaQueryWrapper<Orders> queryWrapper = new LambdaQueryWrapper<>();ordersMapper.delete(queryWrapper);}
}
【MyShardingSphereTest.java】
package com.chz.myShardingSphere;@SpringBootApplication
public class MyShardingSphereTest {public static void main(String[] args) {SpringApplication.run(MyShardingSphereTest.class, args);}
}
启动【MyShardingSphereTest】
# 下面进行测试:
访问以下url创建6条数据:
http://localhost:8080/test/testAddOrder?id=1
http://localhost:8080/test/testAddOrder?id=2
http://localhost:8080/test/testAddOrder?id=3
http://localhost:8080/test/testAddOrder?id=4
http://localhost:8080/test/testAddOrder?id=5
http://localhost:8080/test/testAddOrder?id=6
然后访问【http://localhost:8080/test/testSelectOrder】看下数据能不能查出来:
可以看到数据都查出来了。
增加个条件试试,访问【http://localhost:8080/test/testSelectOrder?customerId=1】
也运行正常
相关文章:

java:使用shardingSphere访问mysql的分库分表数据
# 创建分库与分表 创建两个数据库【order_db_1、order_db_2】。 然后在两个数据库下分别创建三个表【orders_1、orders_2、orders_3】。 建表sql请参考: CREATE TABLE orders_1 (id bigint NOT NULL,order_type varchar(255) NULL DEFAULT NULL,customer_id bigi…...

红酒:如何选择适合的红酒储存容器
选择适合的红酒储存容器对于保持雷盛红酒的品质和风味至关重要。不同的容器具有不同的优缺点,因此应根据个人需求和条件进行选择。以下是一些常见的红酒储存容器的特点和适用场景: 玻璃瓶:玻璃瓶是常见的红酒储存容器。它具有良好的密封性能、…...

【C++】 使用CRT 库检测内存泄漏
CRT 库检测内存泄漏 一、CRT 库简介二、CRT 库的使用1、启用内存泄漏检测2、设置应用退出时显示内存泄漏报告3、丰富内存泄漏报告4、演示使用 内存泄漏是 C/C 应用程序中最微妙、最难以发现的 bug,存泄漏是由于之前分配的内存未能正确解除分配而导致的。 最开始的少…...
python手动搭建transformer,并实现自回归推理
以下是添加了详细注释的代码和参数介绍: Transformer 实现及自回归推理 本文展示了如何手动实现一个简化版的Transformer模型,并用自回归方式实现一个seq2seq任务,例如机器翻译。 导入必要的库 import torch import torch.nn as nn import…...

AI数据分析:用deepseek进行贡献度分析(帕累托法则)
帕累托法则,也称为80/20法则,是由意大利经济学家维尔弗雷多帕累托提出的。它指出在许多情况下,大约80%的效益来自于20%的原因。这个原则在很多领域都有应用,包括商业、经济、社会问题等。 在数据分析中,帕累托法则可以…...
生成式人工智能的风险与治理——以ChatGPT为例
文 | 西南政法大学经济法学院 马羽男 以ChatGPT为代表的生成式人工智能在创造社会福利的同时,也带来了诸多风险。因此,当务之急是结合我国生成式人工智能发展状况,厘清其应用价值与潜在风险之间的关系,以便在不影响应用发展的前提…...

十足正式在山东开疆拓土!首批店7月初开业,地区便利店现全新面貌!
十足便利店将正式进军山东市场,以济南、淄博两座城市为核心发展起点,目前济南市已经有三家十足门店正在装修施工中,首批15家门店将于7月初开业,这标志着十足集团市场战略布局迈出了至关重要的一步。 随着3月份罗森品牌在济南成功开…...
Unity2D游戏开发-玩家控制
在Unity2D游戏开发中,玩家控制是游戏互动性的核心。本文将解析一个典型的Unity2D玩家控制脚本,探讨如何实现流畅的玩家移动、跳跃和动画切换。以下是一个Unity脚本示例,实现了这些基础功能。 1. 脚本结构 using System.Collections; using …...

如何在 Windows 11 上免费恢复永久删除的文件
虽然Windows 上的已删除文件恢复不简单,但您可能希望免费或无需任何软件即可恢复已删除的文件。下面,我们列出了一个指南,其中包含有关如何在 Windows 11 上免费检索永久删除的文件的说明。 #1 奇客数据恢复 奇客数据恢复是一个广受好评的免…...

Spring boot 集成mybatis-plus
Spring boot 集成mybatis-plus 背景 Spring boot集成mybatis后,我们可以使用mybatis来操作数据。然后,我们还是需要写许多重复的代码和sql语句,比如增删改查。这时候,我们就可以使用 mybatis-plus了,它可以极大解放我…...
数据仓库之缓慢变化维
缓慢变化维(Slowly Changing Dimensions, SCD)是数据仓库设计中的一个重要概念,用于处理维度表中随时间缓慢变化的属性。维度表中的数据通常描述业务实体(如客户、产品、员工等),而这些实体的某些属性&…...

跑mask2former(自用)
1. 运行docker 基本命令: sudo docker ps -a (列出所有容器状态) sudo docker run -dit -v /hdd/lyh/mask2former:/mask --gpus "device0,1" --shm-size 16G --name mask 11.1:v6 (创建docker容器&…...

Linux日志服务rsyslog深度解析(上)
🐇明明跟你说过:个人主页 🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、日志在Linux系统中的作用 2、rsyslog历史背景 …...
python的df.describe()函数
一、初识describe()函数 在数据分析和处理的过程中,我们经常需要了解数据的基本统计信息,如均值、标准差、最小值、最大值等。pandas库中的describe()函数为我们提供了这样的功能,它可以快速生成数据集的描述性统计信息。 二、describe()函数的基本用法 describe()函数是pan…...
Feign的介绍与说明
Feign是Spring Cloud提供的一个声明式、模板化的HTTP客户端,旨在使编写Java HTTP客户端变得更容易。它的设计目标是让Web服务调用变得更加简单,无论是在本地还是在远程。使用Feign,开发者可以像调用本地服务一样调用远程服务,提供…...

【Linux】用户和组的管理、综合实训
目录 实训1:用户的管理 实训2:组的管理 实训3:综合实训 实训1:用户的管理 (1)创建一个新用户userl,设置其主目录为/home/user 1。 (2)查看/etc/passwd 文件的最后一行,看看是如何记录的。 (3)查看文件/etc/shadow文件的最后一…...

B=2W,奈奎斯特极限定理详解
一直没搞明白奈奎斯特极限定理的含义,网上搜了很久也没得到答案。最近深思几天后,终于有了点心得。顺便吐槽一下,csdn的提问栏目,有很多人用chatgpt秒回这个事,实在是解决不了问题,有时候人的问题大多数都是…...

【Pytorch 】Dataset 和Dataloader制作数据集
文章目录 Dataset 和 Dataloader定义Dataset定义Dataloader综合案例1 导入两个列表到Dataset综合案例2 导入 excel 到Dataset综合案例3 导入图片到Dataset导入官方数据集Dataset 和 Dataloader Dataset指定了数据集包含了什么,可以是自定义数据集,也可以是以及官方数据集Data…...

[Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解
目录 1.正则表达式匹配1.题目链接2.算法原理详解3.代码实现 2.交错字符串1.题目链接2.算法原理详解3.代码实现 3.两个字符串的最小ASCII删除和1.题目链接2.算法原理详解3.代码实现 4.最长重复子数组1.题目链接2.算法原理详解3.代码实现 1.正则表达式匹配 1.题目链接 正则表达…...

Ffmpeg安装和简单使用
Ffmpeg安装 下载并解压 进入官网 (https://ffmpeg.org/download.html),选择 Window 然后再打开的页面中下滑找到 release builds,点击 zip 文件下载 环境变量配置 下载好之后解压,找到 bin 文件夹,里面有3个 .exe 文件 然后复制…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...