首页 > 其他分享 >MybatisPlus动态表名

MybatisPlus动态表名

时间:2024-11-18 15:57:48浏览次数:1  
标签:MybatisPlus String 表名 import 动态 public MyBatisPlusConfig

官网文档

https://baomidou.com/plugins/dynamic-table-name/

Java代码

配置拦截器

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * MyBatis Plus 配置
 * 动态表名插件
 */
@Configuration
public class MyBatisPlusConfig {

    public static ThreadLocal<String> tableNameHolder = new ThreadLocal<>();

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加动态表名插件
        DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
        dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {
            // 从 ThreadLocal 中获取动态表名
            String dynamicTableName = tableNameHolder.get();
            if (dynamicTableName != null) {
                return dynamicTableName; // 返回动态表名
            }
            return tableName; // 默认表名
        });
        interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
        return interceptor;
    }


    /**
     * 生成动态表名
     * @param originalTableName 原表名
     * @param cityid 城市
     * @return 动态表名
     */
    public static String generateDynamicTableName(String originalTableName, String cityid) {
        // 获取当前年份
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        String year = sdf.format(new Date());

        // 生成动态表名
        return originalTableName + "_" + cityid + "_" + year;
    }
}

使用动态表名

import com.baoer.terminaltcpserver.config.MyBatisPlusConfig;

public class SomeService {

    public void someMethod() {
        // 假设原表名为 "feedbacklog"
        String originalTableName = "feedbacklog";
        String cityid = "1";

        // 1.生成动态表名
        String dynamicTableName = MyBatisPlusConfig.generateDynamicTableName(originalTableName, cityid);
        // 2.设置到 ThreadLocal 中
        MyBatisPlusConfig.tableNameHolder.set(dynamicTableName);

        try {
            // 执行数据库操作
            // 例如:userMapper.selectList(null);
        } finally {

            // 3.清除 ThreadLocal 中的值
            MyBatisPlusConfig.tableNameHolder.remove();
        }
    }
}

标签:MybatisPlus,String,表名,import,动态,public,MyBatisPlusConfig
From: https://www.cnblogs.com/aeolian/p/18552868

相关文章

  • 算法笔记一之多段图问题(动态规划)【应试版】
    提示:本文章不含代码,纯应试解题~(中国地质大学(武汉)研究生算法考试题目)文章目录前言一、问题描述1.题目2.符号描述3.公式介绍二、解题步骤1.st......
  • Swagger 3.0 & MybatisPlus 主键BigDecimal 使用过程问题
    PS:本来用的是2.x的,但是因为换了后端框架,导致版本不适配,于是调整到3.0<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>&......
  • 亚历克斯的无聊游戏 | 动态规划
    描述亚历克斯不喜欢无聊。这就是为什么每当他感到无聊时,他都会想出一些游戏。一个漫长的冬夜,他想出了一个游戏。给定由n个整数组成的序列a。玩家可以选择其中的整数。在一个步骤中,他可以选择序列中的一个元素(让我们把它表示为a[k]),然后删除它,此时a中所有值等于a[k]+ 1和a[k]......
  • 动态规划 —— 子数组系列-最长湍流子数组
    1. 最长湍流子数组题目链接:978.最长湍流子数组-力扣(LeetCode)https://leetcode.cn/problems/longest-turbulent-subarray/description/ 2.题目解析假如有一个数组{a,b,c,d}如果在a这个位置,b比a大,呈上升趋势,c比b小,呈下降趋势,d比c大,呈上升趋势,像这种就是湍......
  • Windows查看zipfldr.dll动态库中的段函数
    前言全局说明dll是Win中的动态库,开发时想要调用其中的段函数,就要指定,但怎么知道dll中有哪些段函数呢?就需要用工具查看了。一、说明环境:Windows7旗舰版VisualStudio2013二、2.1文件名:2.2文件名:三、3.1文件名:3.2文件名:四、4.1文件名:......
  • 手把手教你学simulink(14.2)--Simulink 生理系统建模场景:糖尿病患者血糖水平动态监测和
    目录项目名称:心脏生理模型的建模与仿真项目背景系统架构功能模块关键技术实现步骤示例代码结论Simulink是一个非常强大的仿真工具,广泛用于各种领域的系统建模和仿真,包括生理系统建模。以下是一个详细的项目实例,展示如何使用Simulink进行生理系统的建模和仿真。......
  • 从源码角度分析JDK动态代理
    文章目录前言一、JDK动态代理二、动态代理的生成三、invoke的运行时调用总结前言  本篇从源码的角度,对JDK动态代理的实现,工作原理做简要分析。一、JDK动态代理  JDK动态代理是运行时动态代理的一种实现,相比较于CGLIB,目标对象必须实现接口,下面是一个简单案例......
  • 基于webGL的可视化大屏很惊艳,动态效果更惊艳
    基于webGL的可视化大屏堪称惊艳之作。它利用先进的技术将数据以生动的形式呈现,无论是复杂的业务数据还是地理信息等,都能清晰展示。其色彩的运用和图形的构造相得益彰,营造出极具视觉冲击力的画面。而动态效果更是将这种惊艳提升到了新高度。数据的流动不再是静态展示,而是像......
  • STL之动态数组
    一、标准模板库(StandardTemplateLibrary,STL)是HP公司开发的一个C++模板库,包含一些常用的数据结构和算法。具有以下的组件:1.容器:容纳包含一组元素的对象。2.迭代器:提供访问容器的方法3.函数对象4.算法二、STL之向量——vector   vector是c++标准库提供的一个变长数......
  • cmake系列-怎么在构建C++库文件时动态的选择构建动态库还是静态库
    在之前我们介绍的内容里,关于构建动态库还是静态库都是在CMakeLists.txt里指定的,那如果一个解决方案原来是构建动态库,然后因为某些原因又希望构建静态库了,那岂不是还要修改CMakeLists.txt,对于平时用的构建系统来说好像还真的是需要修改,哈哈,但是cmake确实有方案能够在不用修改......