# mybatis-subtable
**Repository Path**: fork-code/mybatis-subtable
## Basic Information
- **Project Name**: mybatis-subtable
- **Description**: mybatis分表插件
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2022-09-08
- **Last Updated**: 2022-09-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# mybatis-subtable
#### 介绍
mybatis分表插件
## mybatis-subtable
MyBatis分表插件,对MyBatis代码无侵入,不改变对MyBatis的使用习惯。
## 使用示例
1、mybatis-config-spring.xml配置文件添加插件
```xml
```
2、需要分表的Mapper/Dao类添加`@SubTable`注解,使用`strategyClass`指定分表策略类
```java
// LongStrategy:自定义分表策略类
@SubTable(strategyClass=LongStrategy.class)
```
3、不需要分表的方法添加`@SubTableIgnore`注解
```java
@SubTableIgnore
List getList();
```
## 分表策略
- 自定义分表策略需要实现`subtable.strategy.Strategy`接口,实现`getFinalTable`获取最终表名方法。
**使用示例:**使用Long类型id分表,10张分表
```java
/**
* 10张表,用id进行分表
*/
public class LongStrategy implements Strategy {
@Override
public String getFinalTable(String baseTableName, Object params) {
Long flag = -1l;
if(params instanceof User) {
flag = ((User)params).getId();
}else if(params instanceof Long) {
flag = (Long) params;
}
return StrategyUtil.getHashTable(baseTableName, "_", flag, 10);
}
}
/**
* 分表策略,按orgNo进行分表
*/
public class SEventErrRecordStrategy implements Strategy {
@Override
public String getFinalTable(String baseTableName, Object params) {
String orgNo;
if (params instanceof SEventErrRecordExample) {
orgNo = ((SEventErrRecordExample) params).getOredCriteria().get(0).getAllCriteria().stream()
.filter(el -> el.getCondition().equalsIgnoreCase("ORG_NO ="))
.map(el -> el.getValue().toString()).findFirst().orElse(null);
} else if (params instanceof SEventErrRecordPO) {
orgNo = ((SEventErrRecordPO) params).getOrgNo();
} else if (params instanceof Map) {
orgNo = ((Map) params).get("orgNo").toString();
} else {
orgNo = null;
}
if (StringUtils.isEmpty(orgNo)) {
return baseTableName;
}
// 添加后缀
StringBuilder tableBuilder = new StringBuilder(baseTableName).append("_").append(orgNo);
return tableBuilder.toString();
}
}
#### 参与贡献
1. https://gitee.com/xujian_jason/mybatis-subtable