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 


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

相关内容

热门资讯

Kimi母公司月之暗面完成超7... 红星资本局2月18日消息,红星资本局从知情人士处获悉,AI助手Kimi的母公司月之暗面(Moonsh...
机器人“内卷”给14亿人看 出品|虎嗅科技组作者|宋思杭编辑|苗正卿头图|视觉中国“AI硬件100”呈现最具成长性的AI硬件公司...
一场面向14亿人的超级路演 时代真的变了,以前春晚看人,现在春晚看机器人。可能是之前被铺垫的太多了,春晚节目单出来之后,果不其然...
2026骏启新程丨联储证券总经... 联储证券总经理张强:很高兴参与“每日经济新闻新春特别策划——2026骏启新程”活动。联储证券作为青岛...
SpaceX及其全资子公司xA... 财联社2月17日电,最新消息显示,埃隆·马斯克旗下的SpaceX及其全资子公司xAI,正在参与五角大...