这是一个或许对你有用的社群 一对一交流/面试小册/简历优化/求职解惑欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料《项目实战视频》从书中学往事上“练”《互联网高频面试题》面朝简历学习春暖花开《架构 x 系统设计》摧枯拉朽掌控面试高频场景题《精进 Java 学习指南》系统学习互联网主流技术栈《必读 Java 源码专栏》知其然知其所以然这是一个或许对你有用的开源项目国产Star破10w的开源项目前端包括管理后台、微信小程序后端支持单体、微服务架构RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRM、AI大模型、IoT物联网等功能多模块https://gitee.com/zhijiantianya/ruoyi-vue-pro微服务https://gitee.com/zhijiantianya/yudao-cloud视频教程https://doc.iocoder.cn【国内首批】支持 JDK17/21SpringBoot3、JDK8/11Spring Boot2双版本来源juejin.cn/post/7569536278255616036为什么需要动态表名亮点特性安装快速上手3步进阶用法调试与性能常见问题FAQ适用场景与对比Demo 与快速验证路线图Roadmap生态与兼容这是我开源的 MyBatis-Plus 动态表名 Starter聚焦“简单、稳定、可扩展”的分表实践。本文通过动机、特性、安装、快速上手、进阶用法与常见问题带你在 10 分钟内掌握并落地动态表名分表。项目地址Starterhttps://github.com/sxhjlzl/mybatis-plus-dynamic-table-starter演示项目Demohttps://github.com/sxhjlzl//mybatis-plus-dynamic-table-demo为什么需要动态表名随着数据规模增长按时间或按用户分片的“分表”成为常态。传统落地往往涉及SQL 拼接、拦截器改造、策略维护与回归测试成本高且容易出错。这个 Starter 以“注解 配置”的方式将分表复杂度收敛到最小实现开箱即用零侵入注解驱动写业务像写普通 CRUD策略模式扩展自定义分表逻辑更顺畅完整日志与故障定位基于 Spring Boot MyBatis Plus Vue Element 实现的后台管理系统 用户小程序支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能项目地址https://github.com/YunaiV/ruoyi-vue-pro视频教程https://doc.iocoder.cn/video/亮点特性开箱即用自动装配默认启用日期分表按年/按月/按日一键切换哈希分表按哈希值均匀分片注解驱动DateSharding、HashSharding即可工具类支持DynamicTableUtils包裹任意代码块灵活优先级多策略并存优先级可控完整日志定位策略匹配与表名替换过程基于 Spring Cloud Alibaba Gateway Nacos RocketMQ Vue Element 实现的后台管理系统 用户小程序支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能项目地址https://github.com/YunaiV/yudao-cloud视频教程https://doc.iocoder.cn/video/安装Mavendependency groupIdcom.lizhuolun/groupId artifactIdmybatis-plus-dynamic-table-starter/artifactId version1.0.0/version /dependencyGradleimplementation com.lizhuolun:mybatis-plus-dynamic-table-starter:1.0.0运行环境Java 21Spring Boot 3.5.6MyBatis-Plus 3.5.14快速上手3步1.添加依赖确保引入 Spring Web 与 MyBatis-Plus Starter。2.配置分表策略在 application.yml 启用并编写策略。# 动态表名配置 dynamic-table: enabled:true enable-sql-log:true # 日期分表订单与日志按月/按日分表 date-sharding: -tables:[t_order,t_log] date-pattern:yyyyMM priority:1 -tables:[t_access_log] date-pattern:yyyyMMdd priority:2 # 哈希分表用户相关表分8张 hash-sharding: -tables:[t_user,t_user_profile] table-count:8 priority:103.代码即用注解或工具类两种方式任选。注解方式推荐Service public class OrderService { Autowired private OrderMapper orderMapper; // 自动根据日期分表如 t_order_202501 DateSharding(value t_order, dateParam date) public Order create(Order order, LocalDate date) { orderMapper.insert(order); return order; } }工具类方式灵活包裹任意代码块public ListOrder queryByDate(LocalDate date) { return DynamicTableUtils.executeWithDate(t_order, date, () - { return orderMapper.selectList(null); }); }进阶用法多表同时路由一次性指定多个逻辑表到实际分表批量操作一致。MapString, String tableMap Map.of( t_order, t_order_202501, t_log, t_log_202501 ); DynamicTableUtils.executeWithTables(tableMap, () - { orderMapper.insert(order); logMapper.insert(log); });自定义策略实现TableRouterStrategy即可接入你自己的路由规则。Component publicclass CustomTableRouterStrategy implements TableRouterStrategy { Overridepublic boolean match(String logicTableName) { returnt_custom.equals(logicTableName); } Overridepublic String getActualTableName(String logic, Object ctx) { return logic _ suffix(ctx); } Overridepublic String getStrategyName() { returnCustomTableRouterStrategy; } Overridepublic int getPriority() { return100; } }调试与性能开启日志定位dynamic-table: enable-sql-log: true logging: level: com.lizhuolun.mybatis.dynamic: DEBUG推荐连接池spring: datasource: hikari: maximum-pool-size: 20 minimum-idle: 5 connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000常见问题FAQ表名未替换检查是否在tables列表中、策略是否匹配、日志是否打印。策略不生效确认注解参数如dateParam/hashKey与方法入参对应AOP 正常工作。SQL 异常核验实际分表是否存在、表结构是否一致查看日志中的替换结果。适用场景与对比业务归档订单/日志随时间增长按月/日归档查询更快。用户分片按照用户维度分散热点写入与读压力。与手写拦截器对比本项目更轻量、配置化、可扩展注解即用维护成本低。Demo 与快速验证进入mybatis-plus-dynamic-table-demo根据 README 初始化数据库并启动mvn spring-boot:run使用curl或 Postman 调用示例接口观察 SQL 替换与分表效果路线图Roadmap更多策略模板与表达式支持更丰富的示例与最佳实践生产问题排查指引与灰度方案生态与兼容运行Java 21 / Spring Boot 3.5.6 / MyBatis-Plus 3.5.14许可Apache-2.0贡献欢迎提交 Issue / PR详见仓库 CONTRIBUTING欢迎加入我的知识星球全面提升技术能力。 加入方式“长按”或“扫描”下方二维码噢星球的内容包括项目实战、面试招聘、源码解析、学习路线。文章有帮助的话在看转发吧。 谢谢支持哟 (*^__^*