一. 简单无优先级连接(即无括号的sql语句) 简单来说,两个子条件间默认and与连接,若两个之间显式写出or()则or或连接. 与连接 and() 当需要简单的将两个条件与连接,则最直接的写法为: QueryWrapper queryW
一. 简单无优先级连接(即无括号的sql语句)
简单来说,两个子条件间默认and与连接,若两个之间显式写出or()则or或连接.
与连接 and()
当需要简单的将两个条件与连接,则最直接的写法为:
QueryWrapper queryWrapper = new QueryWrapper().eq("attr_id",key).eq("catelog_id",catelogId);
当然也可以显式地写出and()如下,但没必要:
QueryWrapper queryWrapper = new QueryWrapper().eq("attr_id",key);queryWrapper.and(qr -> qr.eq("catelog_id", catelogId));
或连接 or()
当需要简单的将两个条件或连接,则最直接的写法为:
QueryWrapper queryWrapper = new QueryWrapper().eq("attr_id",key).or().eq("catelog_id",catelogId);
当然也可以如下,但不那么直观:
QueryWrapper queryWrapper = new QueryWrapper().eq("attr_id",key);queryWrapper.or(qr -> qr.eq("catelog_id", catelogId));
二. 复杂有优先级的的连接
上面有2个不推荐的做法,是因为sql语句为A or B , A and B这种简单连接.当涉及到诸如 A and ( B or C) and D 这类的复杂有优先级的的连接,直接拼接会导致成为 A and B or C and D.所以这时候需要需要or(Consumer consumer),and(Consumer consumer)这两个方法.示例如下:
QueryWrapper queryWrapper = new QueryWrapper().eq("attr_type", "base".equalsIgnoreCase(type) ? 1 : 0); queryWrapper.and(qr -> qr.eq("attr_id", key). or(). like("attr_name", key) ); queryWrapper.and(qr -> qr.eq("catelog_id", catelogId));
生成的sql语句如下:
select ...WHERE (attr_type = ? AND ( (attr_id = ? OR attr_name LIKE ?) ) AND ( (catelog_id = ?) ))...;
由此还可见or(Consumer consumer),and(Consumer consumer)这两个方法参数为Consumer时,会在连接处生成2对括号,以此提高优先级.
来源地址:https://blog.csdn.net/qq_43318840/article/details/125704216
--结束END--
本文标题: Mybatis-Plus中的and()和or()的使用与原理介绍
本文链接: https://www.lsjlt.com/news/386095.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-29
2024-04-29
2024-04-29
2024-04-29
2024-04-29
2024-04-29
2024-04-29
2024-04-29
2024-04-29
2024-04-28
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0