mybatis获取表名_mybatis plus 的动态表名的配置详解

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:00   1271   0

mybatis plus简介

详见mybatis plus的官网

业务要求

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

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

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

具体实现

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.ITableNameHandler;

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){

//获取参数

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

其他基础配置的无异

到此这篇关于mybatis plus 的动态表名的配置详解的文章就介绍到这了,更多相关mybatis plus 动态表名配置内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程!

原文链接:https://blog.csdn.net/XuZZ94/article/details/102547671

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP