mybatis-plus动态表名的示例分析
这篇文章将为大家详细讲解有关mybatis-plus动态表名的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
实现MP中是通过PaginationInterceptor(分页插件)完成动态表名解析的,配置如下:
依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1.tmp</version></dependency>配置类
packagecom.huanchuang.common.config;importcom.baomidou.mybatisplus.extension.parsers.DynamicTableNameParser;importcom.baomidou.mybatisplus.extension.parsers.ITableNameHandler;importcom.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;importcom.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;importorg.mybatis.spring.annotation.MapperScan;importorg.springframework.boot.autoconfigure.condition.ConditionalOnProperty;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importjava.util.Collections;importjava.util.HashMap;/***@Package:com.huanchuang.common.config*@Description:<mybatis-plush配置类>*@Author:MILLA*@CreateDate:2020/09/0414:42*@UpdateUser:MILLA*@UpdateDate:2020/09/0414:42*@UpdateRemark:<>*@Version:1.0*/@Configuration@MapperScan("com.huanchuang.ext.mapper**")@ConditionalOnProperty(prefix="spring.config",name="enableMybatisPlusDynamicTable",havingValue="true")publicclassMybatisPlusDynamicTableConfig{privatestaticfinalStringDYNAMIC_TABLE_PRE="common_user";/***mybatis-plus分页插件*/@BeanpublicPaginationInterceptorpaginationInterceptor(){PaginationInterceptorpaginationInterceptor=newPaginationInterceptor();//设置请求的页面大于最大页后操作,true调回到首页,false继续请求默认falsepaginationInterceptor.setOverflow(false);//设置最大单页限制数量,默认500条,-1不受限制paginationInterceptor.setLimit(500);////开启count的join优化,只针对部分leftjoinpaginationInterceptor.setCountSqlParser(newJsqlParserCountOptimize(true));DynamicTableNameParserdynamicTableNameParser=newDynamicTableNameParser();dynamicTableNameParser.setTableNameHandlerMap(newHashMap<String,ITableNameHandler>(2){{//动态表规则-生成自己需要的动态表名put(DYNAMIC_TABLE_PRE,(metaObject,sql,tableName)->DynamicTableTreadLocal.INSTANCE.getTableName());}});paginationInterceptor.setSqlParserList(Collections.singletonList(dynamicTableNameParser));returnpaginationInterceptor;}}动态表名存储类
packagecom.huanchuang.common.config;/***@Package:com.huanchuang.common.config*@Description:<动态表格存储类>*@Author:MILLA*@CreateDate:2020/09/0414:42*@UpdateUser:MILLA*@UpdateDate:2020/09/0414:42*@UpdateRemark:<>*@Version:1.0*/publicenumDynamicTableTreadLocal{INSTANCE;privateThreadLocal<String>tableName=newThreadLocal<>();publicStringgetTableName(){returntableName.get();}publicvoidsetTableName(StringtableName){this.tableName.set(tableName);}publicvoidremove(){tableName.remove();}}
使用
privatevoidselect(intyear){DynamicTableTreadLocal.INSTANCE.setTableName("user_"+year);LambdaQueryWrapper<SparkDownSample>wrapper=Wrappers.lambdaQuery(User.class);List<User>userList=userMapper.list(wrapper)}@Data
publicclassUser{privateLongid;privateStringuserName;privateStringaddress;privatecharsex;privateByteage;}
关于“mybatis-plus动态表名的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。