关于MyBatis-Plus的queryWapper多层嵌套/循环生成复杂搜索条件

本文介绍如何使用MyBatis-Plus的QueryWrapper实现复杂的多层and/or条件查询,尤其是在循环中处理多层嵌套的查询条件。通过示例代码展示了如何自定义方法生成查询条件。

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


前言

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了QueryWrapper自定义查询对象,可以无需手写sql,进行条件查询。在其中的and()和or()方法,可以进行条件的连接。


一、问题描述

需要生成的搜索条件带多层and/or,且要在循环中处理,没法一次处理完成。

二、解决步骤

1.声明对QueryWrapper对象的编辑方法

代码如下(示例):

/**
 * 生成筛选条件
 */
public static <T> void createQW(QueryWrapper<T> qw, JSONArray devList) {
	// 循环体,采用递归也可
	for (int i = 0; i < devList.size(); i++) {
		JSONObject dev = devList.getJSONObject(i);
		String deviceid = dev.getString("deviceid");
		String devtype = dev.getString("devtype");
		if (i == 0) {
			// 内部还可再调用其他生成筛选条件的方法,这里没有再往下写
			qw.nested(qw1 -> qw1.eq("deviceid", deviceid).eq("devtype", devtype));
		} else {
			qw.or(qw1 -> qw1.eq("deviceid", deviceid).eq("devtype", devtype));
		}
	}
}

2.调用方法

代码如下(示例):

JSONArray devList = postJb.getJSONObject("dev_list").getJSONArray("valuelist");
QueryWrapper<WechatDevice> deviceQW = new QueryWrapper<>();
deviceQW.eq("del_flag", WeChatDeviceUtil.DEL_FLAG_NORMAL);
// 调用方法,在and中嵌套了一层
deviceQW.and(qw -> createQW(qw, devList));
List<WechatDevice> devices = weChatDeviceMapper.selectList(deviceQW);

总结

对queryMapper处理的lamda表达式中可以调用自定义的方法,在里面进行多层sql的处理

引用:
关于MybatisPlus的QueryWrapper定义查询条件的and()和or()方法连用问题https://blog.youkuaiyun.com/qq_42846022/article/details/105191967

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值