Skip to content

数据库分表

只支持单列的分表

1. 注解

1.1 @SplitTable 实体上的分表注解

用于标明此实体类是分表实体类,需要指定一个value,就是分表分隔器

1.2 @SplitTableKey 实体上的分表字段注解

用于标明此字段是分表分隔字段,只能设置一个字段

2.示例

2.1 分表实体类

java

@Data
@SplitTable(SysUserSplitter.class)
public class SysUser {

    @TableId
    private Integer id;

    @SplitTableKey
    private Integer groupId;

    private String nickname;

    private String username;
}

2.2 分表分隔器

java
public class SysUserSplitter implements TableSplitter {

    @Override
    public boolean support(Class<?> type) {
        return type == Integer.class || type == int.class;
    }

    @Override
    public String split(String sourceTableName, Object splitValue) {
        Integer groupId = (Integer) splitValue;
        //分成10个表
        return sourceTableName + "_" + groupId % 10;
    }
}

3. 使用

其他操作和普通操作没有区别;但是条件等一定要有分表key的条件

java
SysUser sysUser = sysUserMapper.get(where -> {
    where.eq(SysUser::getId, 1).eq(sysUser::getGroupId, 12);
});