Mybatis plus : QueryWapper条件构造器封装之(多字段模糊搜索)
创始人
2025-06-01 12:06:31

1. 业务场景: 

mybatis plus 条件构造器 多字段模糊搜索

使用理由:  每次去写很麻烦, 写成一个公共方法 一次痛苦, 多次受益, 封装思想
使用简单方便

2. MathUtils工具类

/*** 数组缩容** @param conditions* @return*/public static String[] removeFirstElement(String... conditions) {return Arrays.copyOfRange(conditions, 1, conditions.length);}

3. 封装方法(持续更新吧...)

import com.aisce.common.utils.Maths.MathUtils;
import com.aisce.common.utils.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;/*** 构造器 构造方法封装** @Author pzy* @Description: TODO* @Version 0.1.0*/
public class WrappersConstructor {/*** 条件构造器之 模糊搜索公共字段 弱校验** @param queryWrapper* @param searchName* @param conditions* @param * @return*/public static  QueryWrapper wrapperConstructor(QueryWrapper queryWrapper, String searchName, String... conditions) {if (conditions == null || conditions.length < 1) {return new QueryWrapper<>();}return WrappersConstructor.wrapperBaseConstructor(queryWrapper, searchName, conditions);}/*** 条件构造器之 模糊搜索公共字段 强校验* Force Re-Check** @param forceCheck   (传递true 校验, 然后抛异常, 不可以不传递)* @param queryWrapper* @param searchName* @param conditions* @param * @return*/public static  QueryWrapper wrapperConstructor(boolean forceCheck, QueryWrapper queryWrapper, String searchName, String... conditions) {//用法两个if (conditions == null || conditions.length < 1) {if (forceCheck) {throw new RuntimeException("Error ways at wrapperConstructor[args1,args2,args3...], args3 value of empty is not allowed");}return new QueryWrapper<>();}return WrappersConstructor.wrapperBaseConstructor(queryWrapper, searchName, conditions);}/*** 条件构造器 模糊搜索基础数据创建** @param queryWrapper* @param searchName* @param conditions* @param * @return*/private static  QueryWrapper wrapperBaseConstructor(QueryWrapper queryWrapper, String searchName, String... conditions) {return queryWrapper.and(StringUtils.isNotBlank(searchName), wrapper -> {wrapper.like(conditions[0], searchName);//计算数组String[] newConditions = MathUtils.removeFirstElement(conditions);if (newConditions.length > 0) {//拼接 第一个没有or 后面有orfor (String condition : newConditions) {wrapper.or().like(condition, searchName);}}});}}

4. 使用方式

-> 4.1 弱类型校验(默认): 

---> 4.1.1 参数一: 条件构造器 可以直接new 或者 使用之前生成的

---> 4.1.2 参数二: 搜索名称(传递的参数值)

---> 4.1.3 参数(3到n) 模糊搜索字段, 有几个添几个

 queryWrapper = WrappersConstructor.wrapperConstructor(queryWrapper, searchName, "username", "telephone");

-> ps: 都不填, 不可以在最后面使用

-> 4.2 强类型校验

-> 参数1: 默认false 开启true 

queryWrapper = WrappersConstructor.wrapperConstructor(true,queryWrapper, searchName);

-> 开启后如果不填,或者使用方法有误, 会报异常

(自由修改, 代码在上面)

 Error ways at wrapperConstructor[args1,args2,args3...], args3 value of empty is not allowed 


封装思想,实现的过程, 持续更新吧~~~

相关内容

热门资讯

8个月暴涨10倍,最火AI巨头... 光模块/CPO,又创历史新高了。再创新高,“易中天”大爆发今年以来,AI板块缔造了太多大牛股,而AI...
“祥源系”掌舵人俞发祥被刑拘!... 富豪沦为阶下囚,谁该为百亿兑付“埋单”?作者 | 于婞编辑丨高岩来源 | 野马财经一场涉及上百亿资金...
【视频】超级行动派:如何保卫财... 文 | 清和 智本社社长社长,这种经济环境,该怎么降低风险?怎么配置资产?这几年,经常有社友问我这两...
持续亏损、第三次增资,深蓝汽车... 从成立至今,深蓝汽车经历了销量快速增长的喜悦,也面临着持续亏损的困境,其发展历程折射出传统车企向新能...
“00后”体育生用AI做外贸,... 当下入局做外贸,要想赚到第一桶金,靠的是一个无所不能的“超级个体”,还是分工明确的“系统战队”?两年...