mybatis plus 的动态表名的配置详解
mybatisplus简介
详见mybatisplus的官网
业务要求
- 业务上要求存储数据的时候根据某个字段动态的选择数据要存储的表.
- 如根据code字段:code->[1001,1002]来进行选择存储的表:
- 经过下面的配置实现动态表名如-->table1_1001,table_1002的效果.以此动态生成表名的效果.
具体实现
MPConfig.java
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.JSONObject;
importcom.baomidou.mybatisplus.extension.parsers.DynamicTableNameParser;
importcom.baomidou.mybatisplus.extension.parsers.ITableNameHandler;
importcom.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
importorg.apache.ibatis.reflection.MetaObject;
importorg.mybatis.spring.annotation.MapperScan;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importjava.util.Collections;
importjava.util.HashMap;
importjava.util.List;
/**
*@Author:xuzz
*@Description:
*@Date:Createdin上午11:2219-10-12
*@ModifiedBy:
*/
@Configuration
@MapperScan("com.dao")
publicclassMPConfig{
@Autowired
privateTablestableNames;
/**
*@Author:xuzz
*@Date:上午11:4619-10-12
*动态表名
*/
@Bean
publicPaginationInterceptorpaginationInterceptor(){
PaginationInterceptorpaginationInterceptor=newPaginationInterceptor();
DynamicTableNameParserdynamicTableNameParser=newDynamicTableNameParser();
dynamicTableNameParser.setTableNameHandlerMap(newHashMap(2){{
//涉及表集合
Listtables=tableNames.getTableNames();
//动态表规则初始表名+_+code
tables.forEach(tableTitle->put(tableTitle,(metaObject,sql,tableName)->tableName+"_"+String.valueOf(getParamValue("关键字段名",metaObject))));
}});
paginationInterceptor.setSqlParserList(Collections.singletonList(dynamicTableNameParser));
returnpaginationInterceptor;
}
/**
*@Author:xuzz
*@Date:下午2:5519-10-12
*获取参数值
*/
privateObjectgetParamValue(Stringtitle,MetaObjectmetaObject){
//获取参数
ObjectoriginalObject=metaObject.getOriginalObject();
JSONObjectoriginalObjectJSON=JSON.parseObject(JSON.toJSONString(originalObject));
JSONObjectboundSql=originalObjectJSON.getJSONObject("boundSql");
JSONObjectparameterObject=boundSql.getJSONObject("parameterObject");
returnparameterObject.get(title);
}
Tables.java表头列表类
@Configuration
@ConfigurationProperties("mp")
publicclassTables{
privateListtableNames;
publicListgetTableNames(){
returntableNames;
}
publicvoidsetTableNames(ListtableNames){
this.tableNames=tableNames;
}
}
application.yml
mp: tableNames:#表头列表 -table1 -table2 -table3
其他基础配置的无异
到此这篇关于mybatisplus的动态表名的配置详解的文章就介绍到这了,更多相关mybatisplus动态表名配置内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。