mybatis-plus 动态表名简易使用

2024-04-25 14:20

本文主要是介绍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 {@Beanpublic 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*/@Overridepublic 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();}



参考:

  • Mybatis-Plus 之【动态表名】

这篇关于mybatis-plus 动态表名简易使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/934927

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1