Mybatis-plus 动态表名

1`

		 <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.1.1</version>
           <!-- <scope>provided</scope>-->
        </dependency>`

2

package com.djhu.imagecalltool.viewService.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.core.parser.ISqlParser;
import com.baomidou.mybatisplus.extension.parsers.DynamicTableNameParser;
import com.baomidou.mybatisplus.extension.parsers.ITableNameHandler;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;


/**
 * 数据库配置和mybatis配置注入类
 *
 */
@Slf4j
@Configuration
@MapperScan(basePackages = {ViewServerConfig.PACKAGE,"com.djhu.imagecalltool.viewService.service.impl"},sqlSessionFactoryRef="viewSqlSessionFactory")
public class ViewServerConfig  {

	static final String PACKAGE = "com.djhu.imagecalltool.viewService.mapper";
	static final String MAPPER_LOCATION = "classpath*:com/djhu/imagecalltool/viewService/mapper/xml/*.xml";
	
	@Value("${djhu.sqlServer.viewService.url}")
	private String url;

	@Value("${djhu.sqlServer.viewService.username}")
	private String user;

	@Value("${djhu.sqlServer.viewService.passwd}")
	private String password;

	@Value("${djhu.sqlServer.viewService.driver}")
	private String driverClass;

	@Autowired
	private PaginationInterceptor paginationInterceptor;




	@Bean(name = "viewSqlServerDataSource")
	public DataSource viewSqlServerDataSource() {
		try{
			DruidDataSource viewDesignDataSource = new DruidDataSource();
			viewDesignDataSource.setDriverClassName(driverClass.trim());
			viewDesignDataSource.setUrl(url.trim());
			viewDesignDataSource.setUsername(user.trim());
			viewDesignDataSource.setPassword(password);
			viewDesignDataSource.setInitialSize(5);
			viewDesignDataSource.setMinIdle(1);
			viewDesignDataSource.setMaxActive(10);
			viewDesignDataSource.setPoolPreparedStatements(false);
			return viewDesignDataSource;
		}catch (Exception e){
			log.error("连接数据库失败!!!",e);
			return null;
		}
	}
	
	
	
	@Bean(name = "viewSqlSessionFactory")
	public SqlSessionFactory imageSqlSessionFactory(@Qualifier("viewSqlServerDataSource")DataSource viewSqlServerDataSource)
			throws Exception {
		MybatisSqlSessionFactoryBean viewSqlSessionFactory = new MybatisSqlSessionFactoryBean();
		viewSqlSessionFactory.setDataSource(viewSqlServerDataSource);
		viewSqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
		//关键代码 设置 MyBatis-Plus 分页插件
		Interceptor[] plugins = {paginationInterceptor};
		viewSqlSessionFactory.setPlugins(plugins);
		return viewSqlSessionFactory.getObject();
	}




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

	/**
	 * 分页插件
	 * @return
	 */

	@Bean
	public PaginationInterceptor paginationInterceptor() {
		PaginationInterceptor paginationInterceptor = new PaginationInterceptor();

        /*动态表名*/
		List<ISqlParser> sqlParserList = new ArrayList<>();
		DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();
		Map<String, ITableNameHandler> tableNameHandlerMap = new HashMap<>();
		//HDR_PATIENT是@TableName
		tableNameHandlerMap.put("HDR_PATIENT", new ITableNameHandler() {
			@Override
			public String dynamicTableName(MetaObject metaObject, String sql, String tableName) {
				return myTableName.get();//返回null不会替换 注意 多租户过滤会将它一块过滤不会替换@SqlParser(filter=true) 可不会替换
			}
		});
		dynamicTableNameParser.setTableNameHandlerMap(tableNameHandlerMap);
		sqlParserList.add(dynamicTableNameParser);
		paginationInterceptor.setSqlParserList(sqlParserList);

		return  paginationInterceptor;
	}

}

3

 ViewServerConfig.myTableName.set("hhhh");

我犯的错误主要有两点
1,Mybatis-plus版本不对,3.40后这个分页插件PaginationInterceptor就不生效了
2,没有加载插件//关键代码 设置 MyBatis-Plus 分页插件 Interceptor[] plugins = {paginationInterceptor}; viewSqlSessionFactory.setPlugins(plugins);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值