千家信息网

mybatis-plus动态表名的示例分析

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章将为大家详细讲解有关mybatis-plus动态表名的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现MP中是通过PaginationInterc
千家信息网最后更新 2025年01月20日mybatis-plus动态表名的示例分析

这篇文章将为大家详细讲解有关mybatis-plus动态表名的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

实现

MP中是通过PaginationInterceptor(分页插件)完成动态表名解析的,配置如下:

依赖

 com.baomidou mybatis-plus-boot-starter 3.3.1.tmp

配置类

package com.huanchuang.common.config; import com.baomidou.mybatisplus.extension.parsers.DynamicTableNameParser;import com.baomidou.mybatisplus.extension.parsers.ITableNameHandler;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration; import java.util.Collections;import java.util.HashMap; /** * @Package: com.huanchuang.common.config * @Description:  * @Author: MILLA * @CreateDate: 2020/09/04 14:42 * @UpdateUser: MILLA * @UpdateDate: 2020/09/04 14:42 * @UpdateRemark: <> * @Version: 1.0 */@Configuration@MapperScan("com.huanchuang.ext.mapper**")@ConditionalOnProperty(prefix = "spring.config", name = "enableMybatisPlusDynamicTable", havingValue = "true")public class MybatisPlusDynamicTableConfig {  private static final String DYNAMIC_TABLE_PRE = "common_user";  /**  * mybatis-plus分页插件  */ @Bean public PaginationInterceptor paginationInterceptor() {  PaginationInterceptor paginationInterceptor = new PaginationInterceptor();  // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false  paginationInterceptor.setOverflow(false);  // 设置最大单页限制数量,默认 500 条,-1 不受限制  paginationInterceptor.setLimit(500);//  // 开启 count 的 join 优化,只针对部分 left join  paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));  DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();  dynamicTableNameParser.setTableNameHandlerMap(new HashMap(2) {{   //动态表规则-生成自己需要的动态表名   put(DYNAMIC_TABLE_PRE, (metaObject, sql, tableName) -> DynamicTableTreadLocal.INSTANCE.getTableName());  }});  paginationInterceptor.setSqlParserList(Collections.singletonList(dynamicTableNameParser));  return paginationInterceptor; }}

动态表名存储类

package com.huanchuang.common.config; /** * @Package: com.huanchuang.common.config * @Description: <动态表格存储类> * @Author: MILLA * @CreateDate: 2020/09/04 14:42 * @UpdateUser: MILLA * @UpdateDate: 2020/09/04 14:42 * @UpdateRemark: <> * @Version: 1.0 */public enum DynamicTableTreadLocal { INSTANCE; private ThreadLocal tableName = new ThreadLocal<>();  public String getTableName() {  return tableName.get(); }  public void setTableName(String tableName) {  this.tableName.set(tableName); }  public void remove() {  tableName.remove(); } }

使用

 private void select(int year) {    DynamicTableTreadLocal.INSTANCE.setTableName("user_" + year);   LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(User.class);   List userList = userMapper.list(wrapper )  }@Data
public class User {  private Long id;  private String userName;  private String address;  private char sex;  private Byte age; }

关于"mybatis-plus动态表名的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0