条件构造器
使用MongoPlus快速构建条件
说明:
- 以下出现的第一个入参
boolean condition
表示该条件是否加入最后生成的sql中,例如:query.like(StringUtils.isNotBlank(name), Entity::getName, name) .eq(age!=null && age >= 0, Entity::getAge, age) - 以下代码块内的多个方法均为从上往下补全个别
boolean
类型的入参,默认为true
警告:
不支持以及不赞成在 RPC 调用中把 QueryChainWrapper 进行传输
- QueryChainWrapper 很重
- 传输 QueryChainWrapper 可以类比为你的 controller 用 map 接收值(开发一时爽,维护火葬场)
- 正确的 RPC 调用姿势是写一个 DTO 进行传输,被调用方再根据 DTO 执行相应的操作
custom
java
custom(BasicDBObject basicDBObject);
custom(BSON bson);
- 自定义
- 例:new BasicDBObject("$eq",new BasicDBObject("_id","1"))
eq
java
eq(SFunction<T,Object> column, Object val)
eq(boolean condition, SFunction<T,Object> column, Object val)
- 等于 =
- 例:
eq("name", "老王")
--->name = '老王'
ne
java
ne(SFunction<T,Object> column, Object val)
ne(boolean condition, SFunction<T,Object> column, Object val)
- 不等于 <>
- 例:
ne("name", "老王")
--->name <> '老王'
gt
java
gt(SFunction<T,Object> column, Object val)
gt(boolean condition, SFunction<T,Object> column, Object val)
- 大于 >
- 例:
gt("age", 18)
--->age > 18
gte
java
gte(SFunction<T,Object> column, Object val)
gte(boolean condition, SFunction<T,Object> column, Object val)
- 大于等于 >=
- 例:
gte("age", 18)
--->age >= 18
lt
java
lt(SFunction<T,Object> column, Object val)
lt(boolean condition, SFunction<T,Object> column, Object val)
- 小于 <
- 例:
lt("age", 18)
--->age < 18
lte
java
lte(SFunction<T,Object> column, Object val)
lte(boolean condition, SFunction<T,Object> column, Object val)
- 小于等于 <=
- 例:
lte("age", 18)
--->age <= 18
like
java
like(SFunction<T,Object> column, Object val)
like(boolean condition, SFunction<T,Object> column, Object val)
- LIKE '%值%'
- 例:
like("name", "王")
likeLeft
java
likeLeft(SFunction<T,Object> column, Object val)
likeLeft(boolean condition, SFunction<T,Object> column, Object val)
- LIKE '%值'
- 例:
like("name", "^王")
likeRight
java
likeRight(SFunction<T,Object> column, Object val)
likeRight(boolean condition, SFunction<T,Object> column, Object val)
- LIKE '%值'
- 例:
like("name", "王$")
notLike
java
notLike(SFunction<T,Object> column, Object val)
notLike(boolean condition, SFunction<T,Object> column, Object val)
NOT LIKE '%值%'
例:
notLike("name", "王")
NOT LIKE '值%'
例:
notLikeRight("name", "王")
in
java
in(SFunction<T,Object> column, Collection<?> value)
in(boolean condition, SFunction<T,Object> column, Collection<?> value)
- 字段 IN (value.get(0), value.get(1), ...)
- 例:
in("age",{1,2,3})
--->age in (1,2,3)
java
in(SFunction<T,Object> column, Object... values)
in(boolean condition, SFunction<T,Object> column, Object... values)
- 字段 IN (v0, v1, ...)
- 例:
in("age", 1, 2, 3)
--->age in (1,2,3)
nin
java
nin(SFunction<T,Object> column , Collection<Object> valueList)
nin(boolean condition , String column , Collection<Object> valueList)
- 字段 nin (value.get(0), value.get(1), ...)
- 例:
notIn("age",{1,2,3})
--->age not in (1,2,3)
and
java
and(LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
and(boolean condition,LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
- 并且 在or中使用
orderByAsc
java
orderByAsc(SFunction<T,Object> columns)
orderByAsc(boolean condition, SFunction<T,Object> columns)
- 排序:ORDER BY 字段, ASC
- 例:
orderByAsc("id", "name")
orderByDesc
java
orderByDesc(SFunction<T,Object> columns)
orderByDesc(boolean condition, SFunction<T,Object>... columns)
- 排序:ORDER BY 字段, DESC
- 例:
orderByDesc("id", "name")
or
java
or(SFunction<T,Object> column,Object value)
or(boolean condition,String column,Object value)
or(LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
or(boolean condition,LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
- 或者
nor
java
nor(boolean condition , LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
nor(LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
nor(boolean condition , SFunction<T,Object> column,Object value)
nor(SFunction<T,Object> column,Object value)
nor(boolean condition,String column,Object value)
nor(String column , Object value)
- 查询的文档必须不符合所有条件
type
java
type(SFunction<T,Object> column, TypeEnum value)
type(String column, TypeEnum value)
type(SFunction<T,Object> column, String value)
type(String column, String value)
type(SFunction<T,Object> column, Integer value)
type(String column, Integer value)
- 指定查询的字段类型
exists
java
exists(SFunction<T,Object> column,Boolean value)
exists(boolean condition,SFunction<T,Object> column,Boolean value)
- 字段是否存在
not
java
not(CompareCondition compareCondition)
not(boolean condition,CompareCondition compareCondition)
expr
java
expr(CompareCondition compareCondition)
expr(boolean condition,CompareCondition compareCondition)
- 运行计算的表达式
mod
java
mod(boolean condition,SFunction<T,Object> column,long divide,long remain)
mod(SFunction<T,Object> column,long divide,long remain)
mod(boolean condition,SFunction<T,Object> column,Collection<Long> value)
mod(SFunction<T,Object> column,Collection<Long> value)
mod(boolean condition,String column , long divide,long remain)
mod(String column , long divide,long remain)
mod(boolean condition,String column,Collection<Long> value)
mod(String column,Collection<Long> value)
- 字段值符合余数
elemMatch
java
elemMatch(boolean condition,SFunction<T,Object> column , LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
elemMatch(SFunction<T,Object> column , LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
elemMatch(boolean condition,String column , LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
elemMatch(String column , LambdaQueryChainWrapper<T> lambdaQueryChainWrapper)
- 匹配数组中的值
between
java
Children between(boolean condition , SFunction<T,Object> column,Object gte,Object lte,boolean convertGtOrLt);
Children between(SFunction<T,Object> column,Object gte,Object lte,boolean convertGtOrLt);
Children between(boolean condition,String column,Object gte,Object lte,boolean convertGtOrLt);
Children between(String column,Object gte,Object lte,boolean convertGtOrLt);
- 在...之间
- 布尔类型的参数convertGtOrLt为是否转换为大写和小写,因为需要的两个值,默认取的是大于等于XXX,小于等于XXX
all
java
all(boolean condition,SFunction<T,Object> column,Collection<Object> value)
all(SFunction<T,Object> column,Collection<Object> value)
all(boolean condition,String column,Collection<Object> value)
all(String column,Collection<Object> value)
- 匹配数组中的值 必须同时包含指定的多个元素
regex
java
regex(boolean condition, SFunction<T,Object> column, Object value)
regex(SFunction<T,Object> column,Object value)
regex(boolean condition,String column,Object value)
regex(String column,Object value)
- 正则表达式查询
text
java
text(boolean condition , SFunction<T,Object> column, Object value)
text(SFunction<T,Object> column, Object value)
text(boolean condition , String column, Object value)
- 文本查询
QueryWrapper
说明:
继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取
project
java
project(Projection... projection)
project(List<Projection> projectionList)
select(boolean displayId, Projection... projection)
- 设置查询字段
说明:
以上方法分为两类.
第二类方法为:过滤查询字段(主键除外),入参不包含 class 的调用前需要wrapper
内的entity
属性有值! 这两类方法重复调用以最后一次为准 - 例:
select("id", "name", "age")
- 例:
select(i -> i.getProperty().startsWith("test"))
UpdateWrapper
说明:
继承自 AbstractWrapper
,自身的内部属性 entity
也用于生成 where 条件
及 LambdaUpdateWrapper
, 可以通过 new UpdateWrapper().lambda()
方法获取!
set
java
set(String column, Object val)
set(boolean condition, String column, Object val)
- SQL SET 字段
- 例:
set("name", "老李头")
- 例:
set("name", "")
--->数据库字段值变为空字符串 - 例:
set("name", null)
--->数据库字段值变为null
lambda
- 获取
LambdaWrapper
在QueryWrapper
中是获取LambdaQueryWrapper
在UpdateWrapper
中是获取LambdaUpdateWrapper
链式调用 lambda 式
java
// 区分:
// 链式调用 普通
UpdateChainWrapper<T> update();
// 链式调用 lambda 式。注意:不支持 Kotlin
LambdaUpdateChainWrapper<T> lambdaUpdate();
// 等价示例:
query().eq("id", value).one();
lambdaQuery().eq(Entity::getId, value).one();
// 等价示例:
update().eq("id", value).remove();
lambdaUpdate().eq(Entity::getId, value).remove();