前言
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