您现在的位置是:首页 > 正文

mybatis plus 动态修改表名,添加后缀 最新发布

2024-02-01 05:26:18阅读 3
package cc.admin.config.mybatis;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
 
public class TenantTableNameHandler implements TableNameHandler {

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

	/**
	 * 设置请求线程的month数据
	 * @param suffix
	 */
	public static void setData(String suffix) {
		SUFFIX.set(suffix);
	}

	@Override
	public String dynamicTableName(String sql, String tableName) {
		System.out.println("sql:" + sql);
		String suffix = SUFFIX.get();
		if (StrUtil.isNotEmpty(suffix)) {
			SUFFIX.remove();
			System.out.println("suffix:" + suffix);
			System.out.println("动态查询表:" + tableName + suffix);
			return tableName + suffix;
		}
		return tableName;
	}
}

调用方法

@Override
    public Page<Student> selectByPage() {
        Page<Student> page = PageController.getPageByRequest(request);
        MyTableNameHandler.setData("_2021");//此处调用方法
        return this.baseMapper.selectPage(page, null);
    }

注册插件

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //prevent delete All
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());//防止改、删全表
        DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
        dynamicTableNameInnerInterceptor.setTableNameHandler(new MyTableNameHandler());//动态表名插件
        interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//分页插件
        return interceptor;
    }

}

网站文章

  • 牛客网【测试&amp;测开】面经大全

    作者:大头菜~ 链接:https://www.nowcoder.com/discuss/235042?type=post&amp;order=time&amp;pos=&amp;page=2&amp;...

    2024-02-01 05:26:12
  • CSS中定义多个链接样式,在CSS中定义【导航栏】超链接样式

    1、案例css代码.divcss5a:link{color:#F00}/*链接默认为红色*/.divcss5a:hover{color:#000}/*鼠标悬停黑色*/.divcss5a:active{color:#03F}/*鼠标点击与释放时蓝色*/.divcss5a:visited{color:#F0F}/*访问过为粉红*//*divcss5对象内a超链接设置...

    2024-02-01 05:25:42
  • 【Qt】为什么Qt会使用堆对象(指针)而不是栈对象?

    【Qt】为什么Qt会使用堆对象(指针)而不是栈对象?

    对于C++开发者来说,对象的生命周期和内存管理都是需要特别关注的,Qt为什么new了对象,却不需要我们delete?会不会内存泄露?心中总有一种不安。

    2024-02-01 05:25:35
  • 九九乘法表的不同类型

    左下三角九九乘法表 for row in range(1,10): for col in range(1,row+1): print(&quot;{0}*{1}={2:2d}&quot;.format...

    2024-02-01 05:25:30
  • 定点数和浮点数(一)

    定点数和浮点数(一)

    计算机中的【带小数】

    2024-02-01 05:25:22
  • 深度学习中的batch的大小对学习效果有何影响?

    推荐阅读:[1] 深度学习中的batch的大小对学习效果有何影响? - 言有三的回答 - 知乎[2] 深度学习中的batch的大小对学习效果有何影响? - 程引的回答 - 知乎[3] batch si...

    2024-02-01 05:24:54
  • js 数字加减乘除精度问题,解决小数点后多位小数

    在javascript中,当你使用小数进行加减乘除运算时,你会发现,所得到的结果有时后面带有长长的一段小数,使运算变得复杂,并且影响计算结果。上网查询了一下原因,大致如下:在javascript中,带...

    2024-02-01 05:24:49
  • php+websocket实现在线聊天室(一)

    php+websocket实现在线聊天室(一)

    聊天室最终实现版:https://www.sinight.site/chatroom 可以自己多开几个窗口体验 前言:WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。 浏览器通过 Java...

    2024-02-01 05:24:42
  • Mac上安装Grafana

    Mac上安装Grafana

    Mac上安装Grafana一、背景二、安装步骤1、通过 Home Brew 安装2、通过二进制包进行安装1、下载2、grafana配置文件的路径3、修改grafana配置1、修改默认的3000端口2、...

    2024-02-01 05:24:14
  • Table列表筛选结果保持不变

    Table列表筛选结果保持不变,详解React中setState回调函数

    2024-02-01 05:24:07