Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 实现分库分表功能

yizhihongxing

请允许我详细讲解一下“Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 实现分库分表功能”的完整攻略。

一、什么是Sharding-JDBC和Mybatis-Plus

1. Sharding-JDBC

Sharding-JDBC是基于JDBC的分布式数据库中间件,提供了分片、读写分离、动态数据源等功能,并支持多种关系型数据库(MySQL、Oracle、SQLServer等)。

2. Mybatis-Plus

Mybatis-Plus是Mybatis的增强工具,提供了大量的便捷增删改查接口,同时也提供了代码生成器等功能。

二、集成Sharding-JDBC和Mybatis-Plus

1. 引入依赖

首先需要引入Sharding-JDBC和Mybatis-Plus的依赖,在Maven项目中可以在pom.xml中添加以下代码来引入:

<dependency>
    <groupId>io.shardingjdbc</groupId> 
    <artifactId>sharding-jdbc-core</artifactId>
    <version>2.1.0</version>
</dependency>

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.7.1</version>
</dependency>

2. 配置数据源

在application.properties中添加以下配置:

spring.shardingsphere.datasource.names=ds0,ds1 # 数据源名称

spring.shardingsphere.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0?characterEncoding=utf-8
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=******

spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1?characterEncoding=utf-8
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=******

其中,ds0和ds1是两个数据源的名称,可以自定义,type指定数据源的类型,driver-class-name指定驱动类名,url、username和password分别是数据源的连接地址、用户名和密码。

3. 配置分片规则

在application.properties中添加以下配置:

spring.shardingsphere.rules.sharding.default-database-strategy.inline.sharding-column=id
spring.shardingsphere.rules.sharding.tables.table0.actual-data-nodes=ds0.table0,ds1.table0
spring.shardingsphere.rules.sharding.tables.table0.database-strategy.inline.sharding-column=id
spring.shardingsphere.rules.sharding.tables.table0.database-strategy.inline.algorithm-expression=ds$->{id % 2}
spring.shardingsphere.rules.sharding.tables.table0.table-strategy.inline.sharding-column=id
spring.shardingsphere.rules.sharding.tables.table0.table-strategy.inline.algorithm-expression=table$->{id % 2}

spring.shardingsphere.rules.sharding.tables.table1.actual-data-nodes=ds0.table1,ds1.table1
spring.shardingsphere.rules.sharding.tables.table1.database-strategy.inline.sharding-column=id
spring.shardingsphere.rules.sharding.tables.table1.database-strategy.inline.algorithm-expression=ds$->{id % 2}
spring.shardingsphere.rules.sharding.tables.table1.table-strategy.inline.sharding-column=id
spring.shardingsphere.rules.sharding.tables.table1.table-strategy.inline.algorithm-expression=table$->{id % 2}

这里我们定义了两个表table0和table1,实际数据节点分别为ds0.table0、ds0.table1、ds1.table0和ds1.table1,数据源的选择规则为根据id做取模运算得到的结果,如果为0则选择ds0,否则选择ds1,表的选择规则同理。

4. 配置Mybatis-Plus

在application.properties中添加以下配置:

mybatis-plus.mapper-locations=classpath:mapper/**/*.xml

这里配置了Mybatis-Plus的mapper文件的位置。

5. 编写代码

在Spring Boot中使用Sharding-JDBC和Mybatis-Plus非常简单,只需要编写Mapper接口和Entity类即可。

比如,我们使用两个数据源,分别保存两张表table0和table1的数据。对于table0表,我们先定义一个对应的Entity类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Table0 {
    private Long id;
    private String name;
}

接着,定义一个Mapper接口:

@Repository
public interface Table0Mapper extends BaseMapper<Table0> {

}

然后就可以使用Mybatis-Plus提供的便捷的增删改查接口了。比如,查询所有的数据可以使用:

@Autowired
private Table0Mapper table0Mapper;

List<Table0> table0List = table0Mapper.selectList(null);

对于table1表,可以仿照table0的方式编写对应的代码。

三、示例说明

1. 示例一

我们针对table0表编写了以下代码:

Table0 table0 = new Table0();
table0.setName("test1");
table0Mapper.insert(table0);

List<Table0> table0List = table0Mapper.selectList(new QueryWrapper<Table0>().eq("name", "test1"));

这里我们向table0表中插入一条数据,然后查询表中所有name等于"test1"的数据。

启动应用,查看数据库可以发现:数据已经被正确地分片划分到了两个库中。

2. 示例二

我们针对table1表编写了以下代码:

Table1 table1 = new Table1();
table1.setName("test2");
table1Mapper.insert(table1);

List<Table1> table1List = table1Mapper.selectList(new QueryWrapper<Table1>().eq("name", "test2"));

这里我们向table1表中插入一条数据,然后查询表中所有name等于"test2"的数据。

启动应用,查看数据库可以发现:数据已经被正确地分片划分到了两个库中。

四、总结

通过本文的介绍,相信读者已经对如何集成Sharding-JDBC和Mybatis-Plus,实现分库分表等功能有了深入的理解。需要注意的是,本示例中我们只是使用了简单的取模运算来实现数据源和表的选择规则,实际使用时需要根据实际情况来设计和实现更加复杂的规则。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 实现分库分表功能 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Android发布项目到jitpack的完整步骤

    下面是Android发布项目到jitpack的完整步骤的攻略: 准备工作 确认自己已经有Github账号,如果没有请先去注册Github账号。 将自己的项目上传到Github,确保项目能够正常编译。 注册JitPack账号 打开JitPack官网,进入首页,点击右上角的“Sign in”进入注册页面。 如果已有Github账号,则可以直接使用Github账号…

    GitHub 2023年5月16日
    00
  • git_stats web代码图形统计工具详解

    Git_stats web代码图形统计工具详解 Git_stats是一个用于统计和展示GitHub代码库信息的工具。它使用Ruby编写,可以为任何Git代码库生成详细的统计信息。通过git_stats可以轻松了解代码库的活动情况、开发贡献、代码行数、提交频率等信息,能够帮助代码管理者更好地管理代码库。 安装Git_stats 要使用Git_stats,需要首…

    GitHub 2023年5月16日
    00
  • Win10 20H1快速预览版18990今日推送 更新内容汇总

    Win10 20H1快速预览版18990更新内容汇总 Windows10系统不断更新,新的20H1版本也在紧锣密鼓的开发中,微软已经发布了Win10 20H1快速预览版18990更新,以下是该更新的内容汇总。 更新内容 1. 设置应用增加了控制中心选项 在设置应用程序中,增加了控制中心选项。在“设备”下拉菜单中,用户可以找到“控制中心”选项。点击进入后,可以…

    GitHub 2023年5月16日
    00
  • 详解如何使用Bazel构建Golang程序

    下面是详细讲解如何使用Bazel构建Golang程序的完整攻略。 什么是Bazel Bazel 是 Google 开发的一种构建工具,它可以用于构建各种编程语言的应用程序,包括 Golang。Bazel 有以下特点: 可以处理非常大的代码库和构建目标。 支持多种语言和平台的构建。 支持自定义构建规则,并且可以调用外部工具。 有自己的缓存机制,可以显著提高重新…

    GitHub 2023年5月16日
    00
  • docker安装rockerChat设置聊天室的详细步骤

    一、 安装Docker1. 到Docker官网 https://docs.docker.com/get-docker/ 上下载Docker的安装包,根据自己的操作系统类型选择合适的安装包并进行安装。2. 安装完成后,在终端/命令提示符中输入docker -v 命令,检查Docker的版本信息,确保Docker已经成功安装。 二、 下载Rocketchat的D…

    GitHub 2023年5月16日
    00
  • 微信小程序如何使用canvas二维码保存至手机相册

    当我们在做微信小程序开发的时候,可能会需要用到一些画图或者生成二维码的功能,这时候就需要使用canvas了。而同时,我们可能需要将生成的二维码保存至手机相册,下面就讲解如何在微信小程序中使用canvas生成二维码并保存至手机相册。 步骤一:引入QRCode.js库 在小程序的代码中,我们需要引入QRCode.js库,它可以帮助我们生成二维码。 import …

    GitHub 2023年5月16日
    00
  • IntelliJ IDEA 中git的使用图文教程

    下面是详细讲解 IntelliJ IDEA 中 git 的使用,包括两个示例说明: 准备工作 首先,在使用 IntelliJ IDEA 中的 git 之前,需要安装 git 并确保其已经正确配置好。 其次,在 IntelliJ IDEA 中启用 git 功能。步骤如下: 打开 IntelliJ IDEA,点击 File -> Settings。 在弹出…

    GitHub 2023年5月16日
    00
  • 将来会是Python、Java、Golang三足鼎立的局面吗

    将来Python、Java、Golang三种语言并存并不是不可能的,但是这需要从多个角度进行分析和预测才能得出结论。 确定趋势 首先需确定未来编程语言发展的趋势。未来编程语言的趋势与硬件、软件和市场需求紧密相关。我们可以从以下几个方面探讨: 硬件的发展 未来计算机的发展趋势是:低功耗、高效率、高并发、优惠易用、物联网普及、云计算和边缘计算兴起等。这些都要求语…

    GitHub 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部