当前位置: 首页 > news >正文

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请参考&#xff1a; CREATE TABLE orders_1 (id bigint NOT NULL,order_type varchar(255) NULL DEFAULT NULL,customer_id bigi…...

红酒:如何选择适合的红酒储存容器

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

【C++】 使用CRT 库检测内存泄漏

CRT 库检测内存泄漏 一、CRT 库简介二、CRT 库的使用1、启用内存泄漏检测2、设置应用退出时显示内存泄漏报告3、丰富内存泄漏报告4、演示使用 内存泄漏是 C/C 应用程序中最微妙、最难以发现的 bug&#xff0c;存泄漏是由于之前分配的内存未能正确解除分配而导致的。 最开始的少…...

python手动搭建transformer,并实现自回归推理

以下是添加了详细注释的代码和参数介绍&#xff1a; Transformer 实现及自回归推理 本文展示了如何手动实现一个简化版的Transformer模型&#xff0c;并用自回归方式实现一个seq2seq任务&#xff0c;例如机器翻译。 导入必要的库 import torch import torch.nn as nn import…...

AI数据分析:用deepseek进行贡献度分析(帕累托法则)

帕累托法则&#xff0c;也称为80/20法则&#xff0c;是由意大利经济学家维尔弗雷多帕累托提出的。它指出在许多情况下&#xff0c;大约80%的效益来自于20%的原因。这个原则在很多领域都有应用&#xff0c;包括商业、经济、社会问题等。 在数据分析中&#xff0c;帕累托法则可以…...

生成式人工智能的风险与治理——以ChatGPT为例

文 | 西南政法大学经济法学院 马羽男 以ChatGPT为代表的生成式人工智能在创造社会福利的同时&#xff0c;也带来了诸多风险。因此&#xff0c;当务之急是结合我国生成式人工智能发展状况&#xff0c;厘清其应用价值与潜在风险之间的关系&#xff0c;以便在不影响应用发展的前提…...

十足正式在山东开疆拓土!首批店7月初开业,地区便利店现全新面貌!

十足便利店将正式进军山东市场&#xff0c;以济南、淄博两座城市为核心发展起点&#xff0c;目前济南市已经有三家十足门店正在装修施工中&#xff0c;首批15家门店将于7月初开业&#xff0c;这标志着十足集团市场战略布局迈出了至关重要的一步。 随着3月份罗森品牌在济南成功开…...

Unity2D游戏开发-玩家控制

在Unity2D游戏开发中&#xff0c;玩家控制是游戏互动性的核心。本文将解析一个典型的Unity2D玩家控制脚本&#xff0c;探讨如何实现流畅的玩家移动、跳跃和动画切换。以下是一个Unity脚本示例&#xff0c;实现了这些基础功能。 1. 脚本结构 using System.Collections; using …...

如何在 Windows 11 上免费恢复永久删除的文件

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

Spring boot 集成mybatis-plus

Spring boot 集成mybatis-plus 背景 Spring boot集成mybatis后&#xff0c;我们可以使用mybatis来操作数据。然后&#xff0c;我们还是需要写许多重复的代码和sql语句&#xff0c;比如增删改查。这时候&#xff0c;我们就可以使用 mybatis-plus了&#xff0c;它可以极大解放我…...

数据仓库之缓慢变化维

缓慢变化维&#xff08;Slowly Changing Dimensions, SCD&#xff09;是数据仓库设计中的一个重要概念&#xff0c;用于处理维度表中随时间缓慢变化的属性。维度表中的数据通常描述业务实体&#xff08;如客户、产品、员工等&#xff09;&#xff0c;而这些实体的某些属性&…...

跑mask2former(自用)

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

Linux日志服务rsyslog深度解析(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、日志在Linux系统中的作用 2、rsyslog历史背景 …...

python的df.describe()函数

一、初识describe()函数 在数据分析和处理的过程中,我们经常需要了解数据的基本统计信息,如均值、标准差、最小值、最大值等。pandas库中的describe()函数为我们提供了这样的功能,它可以快速生成数据集的描述性统计信息。 二、describe()函数的基本用法 describe()函数是pan…...

Feign的介绍与说明

Feign是Spring Cloud提供的一个声明式、模板化的HTTP客户端&#xff0c;旨在使编写Java HTTP客户端变得更容易。它的设计目标是让Web服务调用变得更加简单&#xff0c;无论是在本地还是在远程。使用Feign&#xff0c;开发者可以像调用本地服务一样调用远程服务&#xff0c;提供…...

【Linux】用户和组的管理、综合实训

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

B=2W,奈奎斯特极限定理详解

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

【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)&#xff0c;选择 Window 然后再打开的页面中下滑找到 release builds&#xff0c;点击 zip 文件下载 环境变量配置 下载好之后解压&#xff0c;找到 bin 文件夹&#xff0c;里面有3个 .exe 文件 然后复制…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...