Mybatis Plus不能直接实现分库分表。
但可以通过实现插件,结合Mybatis的分库分表方案来使用:
1. Mybatis域路由
Mybatis支持通过数据域将查询路由到不同数据库:
<select id="selectById" domain="read" resultType="Author">
...
</select>
这里指定 domain=”read”,这样只有读库能执行该操作。
Mybatis Plus可以通过插件,在干预点获取该参数:
public Object intercept(Invocation ivk) {
String domain = ivk.getArgs()[0].getDomain();
// 根据domain 路由到不同数据库
}
2. Mybatis 分片
Mybatis通过分片算法,将查询分散到不同数据库:
@Select("... where id modulus 2 = 0")
@ShardBy("id")
List<User> selectByShard();
@ShardBy注解实现分片策略。
同样可以通过插件获取:
public Object intercept(Invocation ivk) {
String shard = ivk.getMethod().getAnnotation(ShardBy.class);
// 根据分片策略路由到不同库
}
3. 数据源动态切换
在插件中,可以实现动态切换数据源:
TransactionFactory txFactory = etc.getTransactionFactory();
Executor executor = txFactory.newExecutor( ... );
// 自定义 Executor 实现数据源切换
通过自定义Executor,实现数据源的动态绑定。
以上这些方案,可以结合Mybatis Plus插件实现分库分表。
需要在插件的intercept方法中,获取Mybatis的元数据。
然后根据规则,路由到不同的数据库连接。
Mybatis Plus无法直接实现分库分表。但通过实现插件,可以结合Mybatis的分库分表方案来使用。