MybatisPlus分表查询

本文介绍了MybatisPlus的三种分表策略:按日期分表,适用于按日期划分的统计数据;按id取模分表,适用于保存用户信息和购买记录,但扩展性有限;自定义分表,表名存储在数据库中,查询时需动态获取。同时,文章提到了自定义拦截器以防止ThreadLocal的内存泄漏问题。
摘要由CSDN通过智能技术生成

按日期分表

这种方式通常会在表名的最后加上年月日,主要适用于按日期划分的统计数据或操作记录。在线实时展示的只有最近表中的数据,其他数据用于离线统计等。

/**
 * 按天分表解析
 */
public class DaysTableNameParser implements TableNameHandler {
 
  @Override
  public String dynamicTableName(String sql, String tableName) {
    String dateDay = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
    return tableName + "_" + dateDay;
  }
}

按id取模分表 


这种方式需要一个id生成器,例如snowflake id或分布式id服务。它保证了相同id的数据都在一张表中,主要适用于保存用户基础信息,系统中的资源信息,购买记录等。当然这种分表方式扩展性较差,后期数据持续增多后需要按id大小分库再分表处理。

/**
 * 按id取模分表处理器
 */
public class IdModTableNameParser implements TableNameHandler {
  private Integer mod;
 
  //使用ThreadLocal防止多线程相互影响
  private static ThreadLocal<Integer> id = new ThreadLocal<Integer>();
 
  public static void setId(Integer idValue) {
    id.set(idValue);
  }
 
  Id
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值