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=myShardingSphere

management.server.port=8080
management.endpoints.web.exposure.include=*

########################################

management.health.db.enabled=false
management.health.elasticsearch.enabled=false

mybatis-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=root

spring.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

#################################################
# table

spring.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 id
        LIMIT 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;

    @Autowired
    private 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;

    @Override
    public String toString() {
        return "Orders{" +
                "id=" + id +
                ", orderType=" + orderType +
                ", customerId=" + customerId +
                ", amount=" + amount +
                '}';
    }
}

【TestService.java】

package com.chz.myShardingSphere.server;

@Service
public class TestService {

    @Autowired
    private OrdersMapper ordersMapper;

    @Transactional
    public void testAddOrder(long id)
    {
        Orders orders = new Orders();
        orders.setId(id);
        orders.setCustomerId(id);
        orders.setOrderType(id);
        orders.setAmount((double)id);
        ordersMapper.insert(orders);
    }

    @Transactional
    public List<Orders> testSelectOrder(Long customerId)
    {
        List<Orders> orders = ordersMapper.testSelectOrder(customerId);
        return orders;
    }

    @Transactional
    public 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】
在这里插入图片描述
也运行正常

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速学习Java的多维数组技巧

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

Unity3D测量面积和角度实现方法(二)

系列文章目录 unity工具 文章目录 系列文章目录&#x1f449;前言&#x1f449;一、unity测量面积&#x1f449;1-1 视频效果&#x1f449;1-2 先创建预制体&#x1f449;1-3 在创建LineRenderer预制体&#x1f449;1-4 代码如下 &#x1f449;二、测量平面和测量空间切换&…

java---程序逻辑控制(详解)

目录 一、概述二、顺序结构三、分支结构3.1 if语句3.1.1 语法格式13.1.2 语法格式23.1.3 语法格式3 3.2 练习3.2.1 判断一个数字是奇数还是偶数3.2.2 判断一个数字是正数&#xff0c;负数&#xff0c;还是零3.2.3 判断一个年份是否为闰年 3.3.switch语句 四、循环结构4.1 while…

远程工作岗位机会

电鸭&#xff1a;​​​​​​https://eleduck.com/?sortnew电鸭社区是具有8年历史的远程工作招聘社区&#xff0c;也是远程办公互联网工作者们的聚集地。在社区&#xff0c;我们进行有价值的话题讨论&#xff0c;也分享远程、外包、零活、兼职、驻场等非主流工作机会。「只工…

最好用的搜题软件大学?8个公众号和软件推荐清单! #知识分享#知识分享#经验分享

今天&#xff0c;我将分享一些受欢迎的、被大学生广泛使用的日常学习工具&#xff0c;希望能给你的学习生活带来一些便利和启发。 1.彩虹搜题 这个是公众号 一款专供大学生使用的搜题神器专注于大学生校内学习和考研/公考等能力提升 下方附上一些测试的试题及答案 1、行大量…

【C++】B树

概念 实现 二叉搜索树的插入&#xff08;非递归&#xff09; 二叉搜索树的中序遍历 二叉搜索树的查找&#xff08;非递归&#xff09; 二叉搜索树的删除&#xff08;非递归&#xff09; 二叉搜索树的查找&#xff08;递归&#xff09; 拷贝构造函数 赋值运算符重载 三、…

三星系统因何而成?或许是因为吞噬了第四颗恒星

相比于其他的类似星体&#xff0c;这个特殊的三星系统拥有更大更紧密的星体。 三星 天文学家发现了前所未见的三星系统。相比于其他典型的三星系统&#xff0c;这一三星系统拥有更大的体积&#xff0c;并且排列也更加紧密&#xff0c;这也使得这一系统更加特别。科学家推测&am…

好用的Web数据库管理工具推荐(ChatGPT 4o的推荐是什么样?)

在现代数据管理和开发中&#xff0c;Web数据库管理工具变得越来越重要。这些工具不仅提供了直观的用户界面&#xff0c;还支持跨平台操作&#xff0c;方便用户在任何地方进行数据库管理。 目录 1. SQLynx 2. phpMyAdmin 3. Adminer 4. DBeaver 5 结论 以下是几款推荐的Web…

操作系统安全:Windows系统安全配置,Windows安全基线检查加固

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

数据结构与算法笔记:基础篇 - 红黑树(上):为什么工程中都用红黑树这种二叉树?

概述 上两篇文章&#xff0c;我们依次讲解了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树&#xff0c;它支持快速插入、删除、查找操作&#xff0c;各个操作的时间复杂度跟树的高度成正比&#xff0c;理想情况下&#xff0c;时间复杂度是 O ( l o g n ) O(logn) …

如何用R语言ggplot2画折线图

文章目录 前言一、数据集二、ggplot2画图1、全部代码2、细节拆分1&#xff09;导包2&#xff09;创建图形对象3&#xff09;主题设置4&#xff09;轴设置5&#xff09;图例设置6&#xff09;颜色7&#xff09;保存图片 前言 一、数据集 数据下载链接见文章顶部 数据&#xff1a…

网络数据包抓取与分析工具wireshark的安及使用

WireShark安装和使用 WireShark是非常流行的网络封包分析工具&#xff0c;可以截取各种网络数据包&#xff0c;并显示数据包详细信息。常用于开发测试过程中各种问题定位。 1 任务目标 1.1 知识目标 了解WireShark的过滤器使用,通过过滤器可以筛选出想要分析的内容 掌握Wir…

企业微信hook接口协议,ipad协议http,确认群发消息

确认群发消息 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid": "d85c7605-ae91-41db-aad5-888762493bac","vids":[],//如果是客户群群发需要填群id"msgid":1097787129…

前端三剑客之JavaScript基础入门

目录 ▐ 快速认识JavaScript ▐ 基本语法 &#x1f511;JS脚本写在哪? &#x1f511;注释 &#x1f511;变量如何声明? &#x1f511;数据类型 &#x1f511;运算符 &#x1f511;流程控制 ▐ 函数 ▐ 事件 ▐ 计时 ▐ HTML_DOM对象 * 建议学习完HTML和CSS后再…

手把手带你做一个自己的网络调试助手(4) - 优化完善

了解全部信息&#xff0c;请关注专栏: QT网络调试助手_mx_jun的博客-CSDN博客 优化服务器 1.不能设置随拖动变大: this->setLayout(ui->verticalLayout); 2. 未连接就能发送消息: //在处理新连接槽函数中加入 if(!ui->btnSend->isEnabled()){//只有客户端连接…

【CC精品教程】osbg格式三维实景模型全解

数据格式同样都是osgb,不同软件生产的,建模是参数不一样,还是有很大区别的,本讲进行一一讲解。 文章目录 一、CC生产的osbg1. osgb的文件结构2. metadata.xml是什么?​(1)EPSG模式metadata.xml​(2)EPSG带+模式metadata.xml​(3)ENU模式metadata.xml​(4)LOCAl模式…

《大道平渊》· 拾贰 —— 天下大事必作于细:做好每一件小事,必然大有所成!

《平渊》 拾贰 "天下难事必作于易&#xff0c;天下大事必作于细。" 社群一位大佬最近在研究新项目, 他做事的 "方法论" 令我深受启发。 他在测试项目时, 每一步都做的非常细致&#xff1a; 整个项目的测试都被划分为一件件小事, 然后有条不紊地推进…… …

postgresql之翻页优化

列表和翻页是所有应用系统里面必不可少的需求&#xff0c;但是当深度翻页的时候&#xff0c;越深越慢。下面是几种常用方式 准备工作 CREATE UNLOGGED TABLE data (id bigint GENERATED ALWAYS AS IDENTITY,value double precision NOT NULL,created timestamp with time zon…

matlab 异常值检测与处理——Z-score法

目录 一、算法原理1、算法概述2、主要函数3、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、算法概述 使用Z分数法,可以找出距离平均值有多少个标准差值…

Java面试八股之静态变量和实例变量的区别有哪些

Java静态变量和实例变量的区别有哪些 存储位置和生命周期&#xff1a; 静态变量&#xff1a;静态变量属于类级别&#xff0c;存储在Java的方法区&#xff08;或称为类区&#xff0c;随JVM实现而异&#xff0c;现代JVM中通常在元数据区内&#xff09;&#xff0c;并且在类首次…