利用SingleKeyDatabaseShardingAlgorithm,自定义分片算法实现
该接口通过继承SingleKeyShardingAlgorithm,实现:
public String doEqualSharding(Collection<String> availableTargetNames, ShardingValue<Comparable<?>> shardingValue);public Collection<String> doInSharding(Collection<String> availableTargetNames, ShardingValue<Comparable<?>> shardingValue);public Collection<String> doBetweenSharding(Collection<String> availableTargetNames, ShardingValue<Comparable<?>> shardingValue);
今天,我们主要来实现:doEqualSharding方法。
public class MyDatabaseShardingAlgorithm implements SingleKeyDatabaseShardingAlgorithm<Long> {@Overridepublic String doEqualSharding(Collection<String> collection, ShardingValue<Long> shardingValue) {// 在这里根据分片键,计算出实例的物理库数据源return xxx;}}
public class MyTableShardingAlgorithm implements SingleKeyTableShardingAlgorithm<Long> {@Overridepublic String doEqualSharding(Collection<String> collection, ShardingValue<Long> shardingValue) {// 根据分片键,计算出实际的物理表return xxx;}}
根据以上获取到的物理库名和表名,改写sql,替换sql中的逻辑库名和逻辑表名,就可以去执行真正的物理sql了。