# db-router
**Repository Path**: charles_ruan/db-router
## Basic Information
- **Project Name**: db-router
- **Description**: Mysql分库分表路由组件
- **Primary Language**: Java
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 1
- **Created**: 2023-04-21
- **Last Updated**: 2024-03-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 分库分表, MySQL
## README
## 需求场景
由于业务体量较大,数据增长较快,所以需要把用户数据拆分到不同的库表中去,减轻数据库压力。
分库分表操作主要有垂直拆分和水平拆分:
- 垂直拆分:指按照业务将表进行分类,分布到不同的数据库上,这样也就将数据的压力分担到不同的库上面。最终一个数据库由很多表的构成,每个表对应着不同的业务,也就是专库专用。
- 水平拆分:如果垂直拆分后遇到单机瓶颈,可以使用水平拆分。相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。如:user_001、user_002
## 快速入门
1. 下载项目,maven clean install
2. 引入依赖
```xml
com.charles
db-router-spring-boot-starter
1.0.0-SNAPSHOT
```
3. 配置文件
```yml
mini-db-router:
jdbc:
datasource:
dbCount: 2
tbCount: 4
default: db00
routerKey: uId
list: db01,db02
db00:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/chalres?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true
username: root
password: root
db01:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/db1?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true
username: root
password: root
db02:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/db2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC&useSSL=true
username: root
password: root
```
4. 使用注解
Mapper
```java
@DBRouterStrategy(splitTable = true)
public interface UserMapper extends BaseMapper {
List getList();
@DBRouter(key = "userName")
void insertUser(UserInfo userInfo);
}
```
`Mapper.xml`
```xml
insert into cls_user (user_name, password) values(#{userName},#{password})
```