QueryWrapper中的or和and
QueryWrapper<Entity> queryWrapper=new QueryWrapper<>();
queryWrapper.lt()——小于
queryWrapper.le()——小于等于
queryWrapper.gt()——大于
queryWrapper.ge()——大于等于
queryWrapper.eq()——等于
queryWrapper.ne()——不等于
queryWrapper.betweeen(“age”,10,20)——age在值10到20之间
queryWrapper.notBetweeen(“age”,10,20)——age不在值10到20之间
queryWrapper.like(“属性”,“值”)——模糊查询匹配值‘%值%’
queryWrapper.notLike(“属性”,“值”)——模糊查询不匹配值‘%值%’
queryWrapper.likeLeft(“属性”,“值”)——模糊查询匹配最后一位值‘%值’
queryWrapper.likeRight(“属性”,“值”)——模糊查询匹配第一位值‘值%’
queryWrapper.isNull()——值为空或null
queryWrapper.isNotNull()——值不为空或null
queryWrapper.in(“属性”,条件,条件 )——符合多个条件的值
queryWrapper.notIn(“属性”,条件,条件 )——不符合多个条件的值
queryWrapper.or()——或者
queryWrapper.and()——和
queryWrapper.orderByAsc(“属性”)——根据属性升序排序
queryWrapper.orderByDesc(“属性”)——根据属性降序排序
queryWrapper.inSql(“sql语句”)——符合sql语句的值
queryWrapper.notSql(“sql语句”)——不符合SQL语句的值
queryWrapper.esists(“SQL语句”)——查询符合SQL语句的值
queryWrapper.notEsists(“SQL语句”)——查询不符合SQL语句的值来源:https://blog.csdn.net/u012660464/article/details/132357205
ChatGPT生成:
eq
(等于):
-
- 用法:
eq(String column, Object val)
- 说明:字段等于某个值,相当于 SQL 中的
=
。 - 示例:
queryWrapper.eq("name", "John");
生成 SQL 片段:name = 'John'
- 用法:
ne
(不等于):
-
- 用法:
ne(String column, Object val)
- 说明:字段不等于某个值,相当于 SQL 中的
<>
或!=
。 - 示例:
queryWrapper.ne("age", 18);
生成 SQL 片段:age <> 18
- 用法:
gt
(大于):
-
- 用法:
gt(String column, Object val)
- 说明:字段大于某个值,相当于 SQL 中的
>
。 - 示例:
queryWrapper.gt("age", 18);
生成 SQL 片段:age > 18
- 用法:
ge
(大于等于):
-
- 用法:
ge(String column, Object val)
- 说明:字段大于等于某个值,相当于 SQL 中的
>=
。 - 示例:
queryWrapper.ge("id", 100);
生成 SQL 片段:id >= 100
- 用法:
lt
(小于):
-
- 用法:
lt(String column, Object val)
- 说明:字段小于某个值,相当于 SQL 中的
<
。 - 示例:
queryWrapper.lt("score", 60);
生成 SQL 片段:score < 60
- 用法:
le
(小于等于):
-
- 用法:
le(String column, Object val)
- 说明:字段小于等于某个值,相当于 SQL 中的
<=
。 - 示例:
queryWrapper.le("age", 30);
生成 SQL 片段:age <= 30
- 用法:
like
(模糊查询):
-
- 用法:
like(String column, Object val)
- 说明:字段进行模糊查询,相当于 SQL 中的
LIKE
。默认是前面加%
。 - 示例:
queryWrapper.like("name", "J");
生成 SQL 片段:name LIKE '%J%'
(注意:具体行为可能因 MyBatis-Plus 版本而异,有些版本可能需要指定前后通配符)
- 用法:
notLike
(不模糊查询):
-
- 用法:
notLike(String column, Object val)
- 说明:字段不进行模糊查询,即不匹配某个模糊值。
- 示例:
queryWrapper.notLike("name", "J");
生成 SQL 片段:name NOT LIKE '%J%'
- 用法:
in
(在范围内):
-
- 用法:
in(String column, Collection<?> value)
- 说明:字段值在给定集合中,相当于 SQL 中的
IN
。 - 示例:
queryWrapper.in("id", Arrays.asList(1, 2, 3));
生成 SQL 片段:id IN (1, 2, 3)
- 用法:
notIn
(不在范围内):
-
- 用法:
notIn(String column, Collection<?> value)
- 说明:字段值不在给定集合中,相当于 SQL 中的
NOT IN
。 - 示例:
queryWrapper.notIn("id", Arrays.asList(1, 2, 3));
生成 SQL 片段:id NOT IN (1, 2, 3)
- 用法:
isNull
(为 null):
-
- 用法:
isNull(String column)
- 说明:字段值为 null。
- 示例:
queryWrapper.isNull("email");
生成 SQL 片段:email IS NULL
- 用法:
isNotNull
(不为 null):
-
- 用法:
isNotNull(String column)
- 说明:字段值不为 null,相当于 SQL 中的
IS NOT NULL
。 - 示例:
queryWrapper.isNotNull("email");
生成 SQL 片段:email IS NOT NULL
- 用法:
between
(在范围内):
-
- 用法:
between(String column, Object val1, Object val2)
- 说明:字段值在给定范围内(包含边界值),相当于 SQL 中的
BETWEEN ... AND ...
。 - 示例:
queryWrapper.between("age", 18, 30);
生成 SQL 片段:age BETWEEN 18 AND 30
- 用法:
notBetween
(不在范围内):
-
- 用法:
notBetween(String column, Object val1, Object val2)
- 说明:字段值不在给定范围内(不包含边界值),相当于 SQL 中的
NOT BETWEEN ... AND ...
。 - 示例:
queryWrapper.notBetween("age", 18, 30);
生成 SQL 片段:age NOT BETWEEN 18 AND 30
- 用法:
groupBy
(分组):
-
- 用法:
groupBy(String... columns)
- 说明:根据一个或多个字段进行分组,相当于 SQL 中的
GROUP BY
。 - 示例:
queryWrapper.groupBy("category_id", "year");
生成 SQL 片段:GROUP BY category_id, year
- 用法:
orderByAsc
(升序排序) 和orderByDesc
(降序排序):
-
- 用法:
orderByAsc(String... columns)
和orderByDesc(String... columns)
- 说明:根据一个或多个字段进行升序或降序排序,相当于 SQL 中的
ORDER BY ... ASC
或ORDER BY ... DESC
。 - 示例:
queryWrapper.orderByAsc("age", "name");
生成 SQL 片段:ORDER BY age ASC, name ASC
- 用法:
having
(条件过滤):
-
- 用法:
having(String sqlHaving, Object... params)
- 说明:添加 HAVING 条件,通常与
groupBy
一起使用,对分组后的结果进行过滤。 - 示例:
queryWrapper.groupBy("category_id").having("SUM(sales) > 1000");
注意:这里的having
方法可能需要与 SQL 片段结合使用,因为直接传递字符串可能导致 SQL 注入风险,所以最好使用Func
等安全的方式来构建复杂的条件。
- 用法:
nested
(嵌套条件):
-
- 用法:
nested(Consumer<QueryWrapper<T>> consumer)
- 说明:嵌套查询条件,可以在嵌套内部继续使用
QueryWrapper
的方法来构建更复杂的查询条件。 - 示例:
queryWrapper.nested(wrapper -> wrapper.eq("status", "active").gt("score", 80));
这将构建一个嵌套的查询条件,首先要求status
为active
,然后要求score
大于 80。
- 用法:
or
和and
(逻辑连接):
-
- MyBatis-Plus 的
QueryWrapper
实际上是通过链式调用隐式地处理AND
和OR
逻辑的,但有时候你可能需要显式地控制它们。虽然QueryWrapper
本身不直接提供or()
和and()
方法(这些方法通常用于构建更复杂的表达式时结合nested()
使用),但你可以通过链式调用的方式自然地构建出包含AND
和OR
逻辑的查询条件。
- MyBatis-Plus 的
但是在实际应用中,假如说,你前面有两个查询条件是 eq,第三个用了 ge 和 le 查询某个时间范围内的数据,而第四个查询继续使用了 eq,那么就会出现这样的问题:
只要是第三个查询条件不为空,不管第三个查询条件和其他任意一个查询条件一起查询,最后的结果就会是和or一样的结果。
因为第三个查询条件之后没有使用and进行连接,ge
和 le
方法本身不直接包含 AND
或 OR
逻辑,如果后面还有查询条件,则还需要在后面拼接 and。
以上观点存疑,我再看看。
几种 QueryWrapper 的使用方法
queryWrapper.like(StringUtils.isNotBlank(name), "name", name);
QueryWrapper<Entity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("column1", value1) // 第一个 eq 条件 .eq("column2", value2) // 第二个 eq 条件 .ge("date_column", startDate) // 第三个条件,大于等于某个开始日期 .le("date_column", endDate) // 第四个条件,小于等于某个结束日期 .eq("column3", value3); // 第五个 eq 条件
queryWrapper.lambda().like(User::getName,name);
// 对 name 进行判空处理
if (name != null && !name.isEmpty()) { // 如果 name 不为空且不为空字符串,则添加 like 查询条件 queryWrapper.lambda().like(User::getName, name);
}
近日总结:最近事情有点多,说有点多,但又比较少。
最近都在投简历,boss已读不回,网申有的测评做完了没水花了,也有笔试,哎,问题不大。
最近突然多了很多感悟,明白了很多东西都不能强求,过去的事情就过去了。
一句话,还是得先做好自己。
保持初心。
其实想了这么久,我还是坚持原本的态度,还是人更重要。
也可能你以后会站在一个更高的层面,会遇到更多更好的人,但对我来说,好的人会有好的人去匹配,我只坚持我那最开始的就好。
但是现实还是狠狠的打了我的脸。
之后又看到一句话,为什么遇不到和自己一样的人,是因为他们是两块一样的拼图,两块一样的拼图怎么会拼到一起。
世事无常,还是应该做好自己,守护好自己的那一方土地。
很多事情都没有了探寻真相的意义,那就把这些东西当作灵魂的枷锁丢掉吧。
别让自己的灵魂负重太多。