# 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}) ```