1 概述
之前笔者写过两篇文章:
这里将两者结合起来,实现读写分离+分库分表的功能。关于环境的配置本文将进行简化叙述,详细可以参考前两篇文章。
2 环境
MySQL 8.0.25(Docker)MyBatis Plus 3.4.3.1MyBatis Plus Generator 3.5.0Druid 1.2.6ShardingSphere 4.1.1Yitter 1.0.6(一个雪花id生成器)
3 数据库环境准备
由于环境准备不是本文的重点,一主一从的主从复制环境可以参考此处搭建。
准备好环境,本地启动两个MySQL,主节点环境:
- 名字:
master - 端口:
3306 - 数据库:两个库(
test0、test1) - 数据表:六个表,每个库三个(
test0.user0、test0.user1、test0.user2、test1.user0、test1.user1、test1.user2)
从节点环境:
- 名字:
slave - 端口:
3307 - 数据库:两个库(
test0、test1) - 数据表:六个表,每个库三个(
test0.user0、test0.user1、test0.user2、test1.user0、test1.user1、test1.user2)
主库配置文件:
1 | bash复制代码[mysqld] |
从库配置文件:
1 | bash复制代码[mysqld] |
完整的数据库脚本和MySQL配置文件放在文末的源码链接中。
4 新建项目
新建项目并引入如下依赖:
DruidMyBatis Plus starterMyBaits Plus GeneratorVelocity coreShardingSphereYitter
Maven如下:
1 | xml复制代码<dependency> |
Gradle如下:
1 | bash复制代码implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.3.1' |
5 配置文件
1 | yml复制代码spring: |
6 准备测试代码
使用MyBatis Plus Generator生成器类生成代码:
1 | java复制代码import com.baomidou.mybatisplus.generator.AutoGenerator; |
实体类加上@Builder,同时设置id类型为IdType.ASSIGN_ID:
1 | java复制代码@Builder |
修改Controller类:
1 | java复制代码@RestController |
同时新增一个雪花id生成器类(具体配置方法可以参考MyBatis Plus官方文档):
1 | java复制代码import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; |
7 测试
刷新几次插入页面:
1 | bash复制代码http://localhost:8080/user/insert |
从输出可以看到插入都是在主节点中进行的:
而查询的时候:
1 | bash复制代码http://localhost:8080/user/select |
输出如下:
是在从节点查询的。
8 参考代码
Java版:
Kotlin版:
本文转载自: 掘金