这篇文章将为大家详细讲解有关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动态表名的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。