mybatis-plus分页total为0,分页失效,mybatis-plus多租户插件使用

背景:项目使用mybatis分页插件不生效,以及多租户使用时读取配置异常

复制代码
分页插件不细述,网上很多方法试了还是不生效,最后修改到当前版本解决,直接上代码

多租户插件使用遇到的问题:

最开始在MyTenantLineHandler中使用 @Value("${tables}"),服务启动时能从配置中心拉取到配置,但在运行时获取到的值为空,试了很多方法都不生效,后面将配置中心的配置在调用MyTenantLineHandler的那一层向下传递配置值,问题解决

租户配置

java 复制代码
@Component
@RefreshScope
@ConfigurationProperties(prefix = "saas.tenant")
public class ConfigProperties {

	public void setColumn(String column) {
		this.column = column;
	}
	public void setTables(List<String> tables) {
		this.tables = tables;
	}

	public String getColumn(){
		return this.column;
	}
	public List<String> getTables(){
		return this.tables;
	}
	private String column="";

	private List<String> tables= Lists.newArrayList();
}
复制代码
TenantLineHandler
java 复制代码
public class MyTenantLineHandler implements TenantLineHandler {
	private final ConfigProperties configProperties;

	public MyTenantLineHandler(ConfigProperties configProperties) {
		this.configProperties = configProperties;
	}

	@Override
	public LongValue getTenantId() {
		Long tenantId = TenantContextHolder.getTenantId();
		return tenantId == null ? new LongValue(-1) : new LongValue(tenantId);
	}

	@Override
	public String getTenantIdColumn() {
		return configProperties.getColumn();
	}

	@Override
	public boolean ignoreTable(String tableName) {
		return !configProperties.getTables().contains(tableName);
		// return TenantLineHandler.super.ignoreTable(tableName);
	}
}
复制代码
MybatisPlusConfig
java 复制代码
@Configuration
@AutoConfigureAfter(PageHelperAutoConfiguration.class)
//@EnableTransactionManagement
public class MybatisPlusConfig {
	@Autowired
	private List<SqlSessionFactory> sqlSessionFactoryList;
	@Autowired
	private ConfigProperties configProperties;

	@PostConstruct
	public void addMyInterceptor() {
		MybatisPlusInterceptor interceptor = mybatisPlusInterceptor();
		for (SqlSessionFactory factory : sqlSessionFactoryList) {
			factory.getConfiguration().addInterceptor(interceptor);
		}
	}

	/**
	 * mybatisplus 分页拦截器
	 * @return
	 */
	public MybatisPlusInterceptor mybatisPlusInterceptor() {
		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
		TenantLineInnerInterceptor tenantLineInnerInterceptor=new TenantLineInnerInterceptor();
		tenantLineInnerInterceptor.setTenantLineHandler(new MyTenantLineHandler(configProperties));
		interceptor.addInnerInterceptor(tenantLineInnerInterceptor);
		return interceptor;
	}
}
相关推荐
天天被压力11 分钟前
【A股分钟级高频数据完全手册 #04】指数分钟级行情数据接口:沪深指数Pro版最新分时取数
java·人工智能·python
敲代码的小小酥14 分钟前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
天天被压力21 分钟前
【A股分钟级高频数据完全手册 #03】股票历史1分钟K线数据接口怎么用:Pro版批量拉取与本地缓存
java·人工智能·python
apcipot_rain28 分钟前
C++转Java日记(02)
java·开发语言·c++
nice_lcj52036 分钟前
【从零理解 Spring AI · 03】Spring AI 在 Spring 生态里的位置
java·spring boot·大模型·spring ai·ai应用开发
码农小河6611 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
风若飞13 小时前
Spring Ai 入门遇到问题1
java·后端·spring
Nuanyt13 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
黑马程序员毕设14 小时前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言
SL_staff14 小时前
从文档工具到知识中枢:基于JVS数字底座构建企业级统一内容管理平台的技术实践
java·开源·全栈