mybatis-plus 自定义SQL、一对多、分页查询过滤多租户

本文介绍了在使用mybatis-plus时如何处理多租户场景下的复杂查询问题,包括自定义SQL分页查询、一对多查询的实现,并探讨了如何在特定情况下避免自动拼接租户过滤条件。文章通过代码示例展示了如何在Mapper和Service层处理这些问题,以确保查询的正确性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

        这几天在使用的mybatis-plus的时候,在遇见复杂业务的时候遇见的一些租户过滤问题,面对多表关联查询的时候、自定义sql的时候,或者说一对多的时候,其中一个查询等功能过滤过滤租户的解决方案。

        在一个缓存命中率不高的场景中,分页很多时候不能依赖主数据分页查询再遍历查询的方式来组装数据的时候,就会遇见自定义sql 或者是一对多查询。这个时候如果用mybatis-plus的多租户就会很有问题。

自定义sql分页查询方法:

Mapper.xml

<select id="getPageUser" resultMap="userResult">
	select * from user ${ew.customSqlSegment}
</select>

这里的SQL很简单,根据自己的业务变动sql。${ew.customSqlSegment} 很多人不了解这个哈,就是:Wrapper<Material> queryWrapper 转化后的sql。还不明白的话,继续看...

Mapper.java

@Mapper
public interface UserMapper extends BaseMapper<User> {
	 
	 List<User> getPageUser(@Param(Constants.WRAPPER) Wrapper<Material> queryWrapper);
}

看清楚哦,这里返回的是一个list集合。${ew.customSqlSegment} 就是指的这的queryWrapper,ew就是Constants.WRAPPER的值。

ServiceImpl.java

@Override
public PageInfo<User> getPageUser(PageParam<UserQueryParam> param, Wrapper<User> queryWrapper) {
	// TODO Auto-generated method stub
	PageHelper.startPage(param.getCurrent(), param.getPageSize());
	List<User> list = baseMapper.getPageUser(queryWrapper);
	PageInfo<User> pageInfo = new PageInfo<User>(list);
	return pageInfo;
}

PageParam 就是组装了,当前页码与页行数,UserQueryParam 是查询条件:用于组装在queryWrapper中。

Service.java、Controller.java我就直接省了....

多租户面临的情况:

mybatis-plus 多住户配置:

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;

import net.sf.jsqlparser.expression.Expression;
import net.s
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kin_bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值