温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-02-23 13:53:00 来源:亿速云 阅读:476 作者:小新 栏目:开发技术

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

实现

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

依赖

<dependency>  <groupId>com.baomidou</groupId>  <artifactId>mybatis-plus-boot-starter</artifactId>  <version>3.3.1.tmp</version> </dependency>

配置类

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: <mybatis-plush配置类>  * @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<String, ITableNameHandler>(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<String> 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<SparkDownSample> wrapper = Wrappers.lambdaQuery(User.class);    List<User> 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动态表名的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI