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 


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

相关内容

热门资讯

科创板上市公司满600家 2025.12.30本文字数:1869,阅读时长大约3分钟作者 |第一财经 黄思瑜12月30日,随着...
宁波华翔:子公司与潜行未来达成... 新京报贝壳财经讯 12月29日,宁波华翔发布公告称,公司子公司宁波华翔启源科技有限公司与潜行未来(杭...
越疆:建议于深圳证券交易所进行... 新京报贝壳财经讯(记者韦博雅)12月29日晚,越疆(02432.HK)发布公告称,公司董事会宣布,为...
赣锋锂业涉内幕交易案被移送审查... 中经记者 李哲 北京报道12月29日晚间,赣锋锂业(002460.SZ、01772.HK)公告披露,...
年末最火爆一幕:一天9个IPO... 这是2025年资本市场最热闹的一幕。12月30日,英矽智能、林清轩、迅策、卧安机器人、美联股份、五一...