mybatis plus 的动态表名的配置详解

网友投稿 812 2022-11-24


mybatis plus 的动态表名的配置详解

mybatis plus简介

详见mybatis plus的官网

业务要求

业务上要求存储数据的时候根据某个字段动态的选择数据要存储的表.

如根据code字段: code->[1001,1002]来进行选择存储的表:

经过下面的配置实现动态表名如 --> table1_1001,table_XPhYQyoZQ1002的效果.以此动态生成表名的效果.

具体实现

MPConfig.java

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

import com.baomidou.mybatisplus.extension.parsers.DynamicTableNameParser;

import com.baomidou.mybatisplus.extension.parsers.ITableNameHandXPhYQyoZQler;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

import org.apache.ibatis.reflection.MetaObject;

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;

/**

* @Author: xuzz

* @Description:

* @Date: Created in 上午11:22 19-10-12

* @Modified By:

*/

@Configuration

@MapperScan("com.dao")

public class MPConfig {

@Autowired

private Tables tableNames;

/**

* @Author: xuzz

* @Date: 上午11:46 19-10-12

* 动态表名

*/

@Bean

public PaginationInterceptor paginationInterceptor(){

PaginationInterceptor paginationInterceptor = new PaginationInterceptor();

DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();

dynamicTableNameParser.setTableNameHandlerMap(new HashMap(2){{

//涉及表集合

List tables = tableNames.getTableNames();

//动态表规则 初始表名+_+code

tables.forEach(tableTitle -> put(tableTitle,(metaObject, sql, tableName) -> tableName + "_" + String.valueOf(getParamValue("关键字段名",metaObject))));

}});

paginationInterceptor.setSqlParserList(Collections.singletonList(dynamicTableNameParser));

return paginationInterceptor;

}

/**

* @Author: xuzz

* @Date: 下午2:55 19-10-12

* 获取参数值

*/

private Object getParamValue(String title, MetaObject metaObject){

http:// //获取参数

Object originalObject = metaObject.getOriginalObject();

JSONObject originalObjectJSON = JSON.parseObject(JSON.toJSONString(originalObject));

JSONObject boundSql = originalObjectJSON.getJSONObject("boundSql");

JSONObject parameterObject = boundSql.getJSONObject("parameterObject");

return parameterObject.get(title);

}

Tables.java 表头列表类

@Configuration

@ConfigurationProperties("mp")

public class Tables {

private List tableNames;

public List getTableNames() {

return tableNames;

}

public void setTableNames(List tableNames) {

this.tableNames = tableNames;

}

}

application.yml

mp:

tableNames: #表头列表

- table1

- table2

- table3

其他基础配置的无异


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在Spring Boot中加载XML配置的完整步骤
下一篇:intellij idea隐藏.iml和.idea等自动生成文件的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~