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