mybatis-plus 动态表名简易使用

场景:由于有些表是分表的,需要给表名添加后缀才能正确地访问表,如sys_user_2024_01

代码

依赖版本

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.4</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.4.3.4</version>
            <scope>compile</scope>
        </dependency>

mybatisplus配置类

/**
 *  MybatisPlus 配置文件
 */
@Configuration
@MapperScan({"com.xxx.dataana.mapper"})
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        //动态表名实现
        DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
        //可以传多个表名参数,指定哪些表使用TableNameSuffixHandler处理表名称
        dynamicTableNameInnerInterceptor.setTableNameHandler(new TableNameSuffixHandler("sys_user"));
        //以拦截器的方式处理表名称
        interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);

        return interceptor;
    }

TableNameSuffixHandler

/**
 * mybatis-plus 成动态表名控制器
 */
public class TableNameSuffixHandler implements TableNameHandler {
    /**
     * 用于记录哪些表可以使用该动态表名处理器(即哪些表需要分表)
     */
    private final List<String> tableNames;

    /**
     * 构造函数,构造动态表名处理器的时候,传递tableNames参数
     * @param tableNames
     */
    public TableNameSuffixHandler(String... tableNames) {
        this.tableNames = Arrays.asList(tableNames);
    }

    /**
     * 每个请求线程维护一个suffix数据,避免多线程数据冲突。所以使用ThreadLocal
     */
    private static final ThreadLocal<String> TABLE_SUFFIX = new ThreadLocal<>();

    /**
     * 设置请求线程的表名后缀数据
     * @param tableNameSuffix
     */
    public static void setSuffix(String tableNameSuffix) {
        TABLE_SUFFIX.set(tableNameSuffix);
    }

    /**
     * 删除请求线程的表名后缀数据
     * 注: 使用完必须释放
     */
    public static void removeSuffix() {
        TABLE_SUFFIX.remove();
    }

    /**
     * 动态表名接口实现方法
     * @param sql
     * @param tableName
     * @return
     */
    @Override
    public String dynamicTableName(String sql, String tableName) {
        if (this.tableNames.contains(tableName)) {
            String suffix = TABLE_SUFFIX.get();
            if(suffix != null){
                //表名增加后缀
                return tableName + suffix;
            }
        }
        //表名原样返回
        return tableName;
    }
}



使用

    public ServiceResponse deleteRelaEventByRelaId(String anaVerId, String relaId) {
        LambdaUpdateWrapper<SysUser> luw = Wrappers.lambdaUpdate(SysUser.class)
                .set(SysUser::getStatus, "0")
                .set(SysUser::getUpdateTime, new Date())
                .eq(SysUser::getId, relaId);
        TableNameSuffixHandler.setSuffix("_2024_01");
        this.update(luw);
        TableNameSuffixHandler.removeSuffix();
        return ServiceResponse.createSuccess();
    }



参考:

相关推荐

  1. mybatis-plus 动态简易使用

    2024-04-25 14:00:03       40 阅读
  2. MyBatis Plus中的动态实践

    2024-04-25 14:00:03       40 阅读
  3. MyBatis-Plus使用步骤

    2024-04-25 14:00:03       65 阅读
  4. Mybatis-Plus使用小记

    2024-04-25 14:00:03       63 阅读
  5. 入门使用mybatis-plus

    2024-04-25 14:00:03       45 阅读
  6. mybatis-plus使用

    2024-04-25 14:00:03       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 14:00:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 14:00:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 14:00:03       82 阅读
  4. Python语言-面向对象

    2024-04-25 14:00:03       91 阅读

热门阅读

  1. NX二次开发直接加载dlx(不用加载到菜单)

    2024-04-25 14:00:03       36 阅读
  2. Docker初探

    2024-04-25 14:00:03       35 阅读
  3. windows、Mac、IntelliJ IDEA常见的配置和使用技巧

    2024-04-25 14:00:03       38 阅读
  4. 二 SpringMVC接收数据

    2024-04-25 14:00:03       30 阅读
  5. windows平台编译OpenCV以支持CUDA

    2024-04-25 14:00:03       108 阅读
  6. 智能合约语言(eDSL)—— 测试

    2024-04-25 14:00:03       45 阅读
  7. YOLOv3的算法原理是怎么样的

    2024-04-25 14:00:03       38 阅读