# sharding-db
**Repository Path**: wei-echo/sharding-db
## Basic Information
- **Project Name**: sharding-db
- **Description**: 分库分表解决方案 sharding jdbc for db
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2021-08-15
- **Last Updated**: 2025-12-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 分库分表解决方案 sharding jdbc for db
[](https://github.com/weiecho/sharding-db/releases)
[](https://mvnrepository.com/artifact/cn.weiecho/sharding-db)
[](http://openjdk.java.net)
[](https://opensource.org/licenses/Apache-2.0)
>
>ShardingSphere是开源的分布式数据库中间件解决方案组成的生态圈,由Sharding-jdbc、Sharding-Proxy等组成,提供标准化的数据分片、安全控制、分布式事务和数据库治理功能,本文主要介绍sharding-db在项目中的使用。
>
>Sharding-db是对Sharding-jdbc的功能封装,方便功能的对接,统一项目团队对数据源的对接
>
项目地址:[sharding-db](https://github.com/weiecho/sharding-db)

Sharding-jdbc根据SQL语句进行词语解析,上下文匹配数据库和表的分片策略生成路由路径,将分表配置中的逻辑库表改写为真实库表SQL语句,发送到底层数据源执行,将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端。
POM配置
```xml
cn.weiecho
sharding-db
1.0.3
```
### Database配置
```java
//单数据源模式
@Configuration
public class DatabaseConfig extends DatabaseSingletonConfigurator {
}
//主从数据源模式
@Configuration
public class DatabaseConfig extends DatabaseMasterSlaveConfigurator {
}
//分表数据源模式
@Configuration
public class DatabaseConfig extends DatabaseShardingConfigurator {
}
```
### 配置文件
```xml
sharding.jdbc:
default-data-source-name: ms_ds_0
data-sources:
ds_master:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:mysql://127.0.0.1:3306/test_db?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
username: root
password: root
initial-size: 1
minimum-idle: 3
maximum-pool-size: 20
idle-timeout: 60000
max-lifetime: 180000
connection-test-query: select 1
test-while-idle: true
test-on-borrow: true
connection-init-sql: set names utf8mb4
ds_slave:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:mysql://127.0.0.1:3307/test_db?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
username: root
password: root
initial-size: 1
minimum-idle: 3
maximum-pool-size: 20
idle-timeout: 60000
max-lifetime: 180000
connection-test-query: select 1
test-while-idle: true
test-on-borrow: true
connection-init-sql: set names utf8mb4
master-slave-rules:
- name: ms_ds_0
master-data-source-name: ds_master
slave-data-source-names: ds_slave
load-balance-strategy: round_robin
```
### 分表策略配置
重写DatabaseShardingConfigurator 的分表策略实现相关功能
```java
/**
* 配置分表策略TableRule
*/
public Collection tableRuleConfigs() {
return Collections.emptyList();
}
/**
* 配置绑定表分组BindingTable
* 关联多表查询的时候避免笛卡尔积的组合出现
*/
public Collection bindingTableGroups() {
return Collections.emptyList();
}
```
### 数据安全配置(脱敏)
敏感数据脱敏,重写DatabaseShardingConfigurator的加密规则实现相关功能
```java
/**
* 数据脱敏策略EncryptRule
*/
public EncryptRuleConfiguration encryptRuleConfig() {
return null;
}
```
### 广播表策略
用于数据源分片下,每个数据源都保存相同表全量数据,如字典表,配置表等
```java
/**
* 配置广播表列表BroadcastTables
*
*/
public Collection broadcastTables() {
return Collections.emptyList();
}
```
### 强制路由至主库
```java
HintManager hintManager = HintManager.getInstance();
hintManager.setMasterRouteOnly();
```
推荐使用try with resource方式
```java
try (HintManager hintManager = HintManager.getInstance()) {
hintManager.setMasterRouteOnly();
}
```
### 强制路由至指定读库
```java
HintManager hintManager = HintManager.getInstance();
hintManager.setDatabaseShardingValue(1);
```
推荐使用try with resource方式
```java
try (HintManager hintManager = HintManager.getInstance()) {
hintManager.setDatabaseShardingValue(1);
}
```