TableNameHandler是MyBatis-Plus提供的一个接口,用于动态生成数据库表名。通过实现这个接口,开发者可以根据实际业务逻辑在运行时动态地确定操作的表名,从而实现更灵活的数据访问。 2. 阐述TableNameHandler的作用和使用场景 TableNameHandler的主要作用是提供动态表名的功能。这在需要根据不
先来看下日期处理的表名处理器,实现TableNameHandler接口后,在dynamicTableName方法中实现动态生成表名的逻辑,方法的返回值就是查询时要使用的表名。 /** * 按天分表解析*/publicclass DaysTableNameParser implements TableNameHandler {@OverridepublicString dynamicTableName(String sql, String tableName) { Strin...
*/publicclassMonthTableNameHandlerimplementsTableNameHandler{//用于记录哪些表可以使用该月份动态表名处理器(即哪些表按月分表)privateList<String> tableNames;//构造函数,构造动态表名处理器的时候,传递tableNames参数publicMonthTableNameHandler(String ...tableNames){this.tableNames = Arrays.asList(tableNames);...
Mybatis-plus引入TableNameHandler接口实现动态表名生成,无需额外引入jar包,学习成本低。根据需求选择表名处理器,灵活定义生成规则。示例实现 示例分为按日期和按ID取模两种分表方式,分别通过四个步骤实现。创建日期表名处理器 实现动态表名生成逻辑,返回查询时使用的表名。创建ID取模表名处理器 实现...
先来看下⽇期处理的表名处理器,实现TableNameHandler接⼝后,在dynamicTableName⽅法中实现动态⽣成表名的逻辑,⽅法的返回值就是查询时要使⽤的表名。/** * 按天分表解析 */ public class DaysTableNameParser implements TableNameHandler { @Override public String dynamicTableName(String sql, ...
HashMap<String, TableNameHandler> map = new HashMap<String, TableNameHandler>(2) {{ //动态表明的前缀 put("user", (sql, tableName) -> { return TABLE_NAME.get(); }); }}; dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map); ...
HashMap<String, TableNameHandler> map = new HashMap<>(); map.put("my_test", (sql, tableName) -> DynamicTableTreadLocal.INSTANCE.getTableName()); // 如果存在多张分表,则在下面添加多条记录 dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map); ...
TableNameHandler tableNameHandler = new TableNameHandler() { @Override public String dynamicTableName(String sql, String tableName) { //tenantProperty中动态标识的是哪些表是分表的表,就在哪些分表的表添加租户的表后缀 //可以将tenantProperty的配置修改为数据库配置也可以,改动更灵活 ...
CREATE TABLE `user_1` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `age` int(2) NULL DEFAULT NULL, `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, ...
TableNameHandler接口是MyBatisPlus提供处理动态表名的接口,通过这个接口可以获取当前执行的sql和具体操作的数据库表名。 我们自己实现了一个动态表名策略类IdTableNameHandler,实现了TableNameHandler,并将其设置到DynamicTableNameInnerInterceptor中,下面具体看一下IdTableNameHandler的实现代码。 IdTableNameHandler是基于id...