1 概述
之前笔者写过两篇文章:
这里将两者结合起来,实现读写分离+分库分表的功能。关于环境的配置本文将进行简化叙述,详细可以参考前两篇文章。
2 环境
MySQL 8.0.25
(Docker
)MyBatis Plus 3.4.3.1
MyBatis Plus Generator 3.5.0
Druid 1.2.6
ShardingSphere 4.1.1
Yitter 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 新建项目
新建项目并引入如下依赖:
Druid
MyBatis Plus starter
MyBaits Plus Generator
Velocity core
ShardingSphere
Yitter
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
版:
本文转载自: 掘金