基于tk.mybatis插件改造实现数据库分表

最近项目中有几张业务表数据量较其他业务表数据量大很多,所有就考虑分表。因为DAO层使用的是tk.mybatis通用插件,所以就抽时间看了下 tk.mybatis源码,以求得不改变任何业务代码实现个性化分表功能。最终得到以下实现方案。

1、tk.mybatis中有一个IDynamicTableName接口,实现此接口就可在CRUD中实现动态表名。

基于tk.mybatis插件改造实现数据库分表_第1张图片

 

 

 

2、创建DynamicTableEntity抽象实体类,实现IDynamicTableName接口,之后所有与数据库表对应的实体类都要继承该抽象类。实现方法如下,

基于tk.mybatis插件改造实现数据库分表_第2张图片

3、示例业务entity如下UserInfo,@Table注解name属性为未分表前原表名,@DefTable为自定义分表注解,其属性value表示分表个数。

基于tk.mybatis插件改造实现数据库分表_第3张图片

4、如下为@DefTable类容

基于tk.mybatis插件改造实现数据库分表_第4张图片

 

 

5、 以上内容已经可以适用普通CRUD方法的动态表需求了,但是还不满足通用的Example查询对象对分表的要求。所以以下为对Example的扩展实现。

基于tk.mybatis插件改造实现数据库分表_第5张图片

这样扩展通用Example查询对象构造函数入参将不再是Class对象,而是对象实例。

到此为止,基于tk.mybatis的分表功能已实现,分表后的n张表名为原表名(例如TableTest)末尾加 “_0到_n-1”的新表名,TableTest_0 到TableTest_n-1 

你可能感兴趣的:(原创)