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

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

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

 

 

 

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

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

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

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

4、如下为@DefTable类容

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

 

 

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

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

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

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

相关文章:

  • 2022-12-23
  • 2021-11-25
  • 2021-11-20
  • 2022-01-16
  • 2021-12-08
猜你喜欢
  • 2021-06-13
  • 2021-09-27
  • 2021-09-19
  • 2021-10-12
  • 2021-12-11
  • 2022-12-23
  • 2021-05-19
相关资源
相似解决方案