mybtis plus 3.2.0 动态表名sql解析器的配置

一.Configuration

@Configuration
public class MybatisPlusConfiguration {

    public static ThreadLocal<String> inputTableName = new ThreadLocal<>();

    @Bean
    public PaginationInterceptor paginationInterceptor(){
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        List<ISqlParser> sqlParserList = new ArrayList<>();
        DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();
        HashMap<String, ITableNameHandler> map = new HashMap<>();
        map.put("user", (metaObject, sql, tableName) -> inputTableName.get());
        dynamicTableNameParser.setTableNameHandlerMap(map);
        sqlParserList.add(dynamicTableNameParser);
        paginationInterceptor.setSqlParserList(sqlParserList);
        paginationInterceptor.setSqlParserFilter(metaObject -> {
            MappedStatement statement = SqlParserHelper.getMappedStatement(metaObject);        //如果是selectById方法,则表名不会被替换,其他的会被动态替换表名
            return "com.mp.dao.UserMapper.selectById".equals(statement.getId());
        });
        return paginationInterceptor;
    }
}

二.测试

传入参数

    @Test
    public void testTableNAme(){
        MybatisPlusConfiguration.inputTableName.set("user_2020");
        userMapper.selectList(null);
    }

三.运行结果

可以观察到查询的表名已经被替换

原文地址:https://www.cnblogs.com/wwjj4811/p/12617092.html

时间: 2024-10-08 11:20:04

mybtis plus 3.2.0 动态表名sql解析器的配置的相关文章

关于mysql存储过程创建动态表名及参数处理

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 最近游戏开始第二次内测,开始处理操作日志,最开始把日志放到同一个表里面,发现一天时间,平均100玩家在线,操作记录就超过13万条,决定拆表,按照日期来保存日志,每天的日志存到一个表里面,然后定期把老的数据导出来备份后删掉. 具体思路是写日志的时候,根据当前的时间决定插入到当天的表里面,如表不存在则创建一个新的表,表名里面带上当天的日期.这就涉及到需要在存储过程里面动态创建一个跟日期相关的表.mysql不

mysql 存储过程 动态表名

今天写存储过程时,遇到要将表名最为参数的问题,如果不涉及到游标的话,使用prepare可以解决问题,但是,动态表名要运用在游标中的话,则prepare就得靠边站了. 集众人之智慧,最后,使用临时表解决了问题. 如何在MySQL的存储过程中实现把过程参数用在游标定义的SELECT命令里面作为表名引用 首先,我们来把场景描绘一下,比如下面的例子(当然是无法正确运行的):   CREATE PROCEDURE `proc`(SourceDBName CHAR(50), SourceTableName

hibernate动态表名映射

引自:http://blog.csdn.net/xvshu/article/details/39187779 最近的一个项目有一个需求,有N个考核单位,要对每个考核单位生成一张考核情况表,这样做的目的是横切数据库,这这个需求的实现中,我的组员遇到了一个技术问题,我将我的解决办法和整个思考过程与大家分享, 思路: 用一个配置文件,一个类去映射多个表,(每个表的结构相同).按照平时的做法,有多少个表就要 写多少个配置文件,岂不是很麻烦.怎样才能只写一个配置文件就能达到上述目的呢? 经过研究,发现hi

hibernate动态表名映射--只有想不到,没有做不到

最近的一个项目有一个需求,有N个考核单位,要对每个考核单位生成一张考核情况表,这样做的目的是横切数据库,这这个需求的实现中,我的组员遇到了一个技术问题,我将我的解决办法和整个思考过程与大家分享, 思路: 用一个配置文件,一个类去映射多个表,(每个表的结构相同).按照平时的做法,有多少个表就要 写多少个配置文件,岂不是很麻烦.怎样才能只写一个配置文件就能达到上述目的呢? 经过研究,发现Hibernate中的NamingStrategy可以达到这个目的.它是用来定义表名和列名映射规 则的一个接口.我

mysql 通过事件定时为数据库创建动态表名

#检测事件是否开启 show variables like 'event_scheduler'; #开启事件(最好在my.init设置,因为重启后还会变回默认值OFF) set global event_scheduler = on; #创建事件(从11月24号开始每天执行一次) create EVENT eve_createTable ON SCHEDULE EVERY 1 DAY STARTS '2016-11-24 00:00:00' ON COMPLETION PRESERVE ENAB

tk.mapper 通用 mapper 动态表名查询

1.在实体上使用@Table 注解 默认不加使用驼峰转下划线匹配 @Table(name="table_name") public class Entity{ } 2.实现 IDynamicTableName 接口 public class Entity implements IDynamicTableName{ @Override public String getDynamicTableName() { return "tableName"; } } 可以直接添

sqlserver 动态表名 动态字段名 执行 动态sql

动态语句基本语法: 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态 SQL declare @fname varchar(20) set @fname = 'FiledName' Select @fname from

MYSQL批量修改表前缀与表名sql语句

修改表名 ALTER TABLE 原表名 RENAME TO 新表名; 一句SQL语句只能修改一张表 show tables; 1. SELECT CONCAT( 'ALTER TABLE ', table_name, ' RENAME TO db_', substring(table_name, 4), ';' ) FROM information_schema. TABLES WHERE table_name LIKE 'ct%'; 批量复制一下到Notepad++中,只保留sql语句,再复

Hibernate 动态表名映射(数据库分表) NamingStrategy

NamingStrategy接口很有意思,可以作为业务类规范和数据库表规范的桥梁,例如一个数据对象User,对应数据库表是 T_USER,如果所有映射关系都是这样的情况,可以使用NamingStrategy做为一个桥梁衔接,当然你也可以在hbx.xml配置文件中指定 class对应的table. hibernate.cfg.xml代码就省略了... User.hbx.xml代码 <hibernate-mapping>     <class name="User">