一、简介
上一节中,我们提到CRUD操作时,可以通过传入UpdateWrapper或QueryWrapper作为更新或查询的条件,从而获取到相应的操作结果,这一节,我们就来介绍两种Wrapper的具体使用方法;
QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件
二、AbstractWrapper
参数的统一说明:
-
boolean condition:表示该条件是否加入最后生成的sql中。
例如:query.eq(StringUtils.isNotBlank(name), Entity::getName, name) ,当name为空时,这个eq不会生成到where条件中;
-
null2IsNull:当参数中Map的value值为空时,是否参添加到where条件:
例如:
默认情况:allEq({id:1,name:”老王”,age:null})–>id = 1 and name = ‘老王’ and age is null
null2IsNull == false时:allEq({id:1,name:”老王”,age:null}, false)—>id = 1 and name = ‘老王’
用于生成where条件:
条件 | 函数 | 说明 |
---|---|---|
allEq | allEq(Map<R, V> params) allEq(Map<R, V> params, boolean null2IsNull) allEq(boolean condition, Map<R, V> params, boolean null2IsNull) |
全部 =,map中的参数,生成where时,and相连; |
eq | eq(R column, Object val) eq(boolean condition, R column, Object val) |
等于 = |
ne | ne(R column, Object val) ne(boolean condition, R column, Object val) |
不等于 <> |
gt | gt(R column, Object val) gt(boolean condition, R column, Object val) |
大于 > |
ge | ge(R column, Object val) ge(boolean condition, R column, Object val) |
大于等于 >= |
lt | lt(R column, Object val) lt(boolean condition, R column, Object val) |
小于 < |
le | le(R column, Object val) le(boolean condition, R column, Object val) |
小于等于 <= |
between | between(R column, Object val1, Object val2) between(boolean condition, R column, Object val1, Object val2) |
BETWEEN 值1 AND 值2 |
notBetween | notBetween(R column, Object val1, Object val2) notBetween(boolean condition, R column, Object val1, Object val2) |
NOT BETWEEN 值1 AND 值2 |
like | like(R column, Object val) like(boolean condition, R column, Object val) |
LIKE ‘%值%’ |
notLike | notLike(R column, Object val) notLike(boolean condition, R column, Object val) |
notLike |
likeLeft | likeLeft(R column, Object val) likeLeft(boolean condition, R column, Object val) | LIKE ‘%值’ |
likeRight | likeRight(R column, Object val) likeRight(boolean condition, R column, Object val) | LIKE ‘值%’ |
isNull | isNull(R column) isNull(boolean condition, R column) |
字段 IS NULL |
isNotNull | isNotNull(R column) isNotNull(boolean condition, R column) |
字段 IS NOT NULL |
in | in(R column, Collection<?> value) in(boolean condition, R column,Collection< ? >value in(R column, Object… values) in(boolean condition, R column, Object… values) |
字段 IN (value.get(0), value.get(1), …) in(“age”,{1,2,3}) ---> age in (1,2,3)in(“age”, 1, 2, 3) ---> age in (1,2,3) |
notIn | notIn(R column, Collection value) notIn(boolean condition, R column, Collection value) notIn(R column, Object… values) notIn(boolean condition, R column, Object… values) |
字段 NOT IN (value.get(0), value.get(1), …) |
inSql | inSql(R column, String inValue) inSql(boolean condition, R column, String inValue) |
字段 IN ( sql语句 ) 例: inSql(“age”, “1,2,3,4,5,6”)—>age in (1,2,3,4,5,6) 例: inSql(“id”, “select id from table where id < 3”)—>id in (select id from table where id < 3) |
notInSql | notInSql(R column, String inValue) notInSql(boolean condition, R column, String inValue) |
字段 NOT IN ( sql语句 ) |
groupBy | groupBy(R… columns) groupBy(boolean condition, R… columns) |
分组:GROUP BY |
orderByAsc | orderByAsc(R… columns) orderByAsc(boolean condition, R… columns) |
ORDER BY 字段, … ASC |
orderByDesc | orderByDesc(R… columns) orderByDesc(boolean condition, R… columns) |
排序:ORDER BY 字段, … DESC |
orderBy | orderBy(boolean condition, boolean isAsc, R… columns) | 排序:ORDER BY 字段 |
having | having(String sqlHaving, Object… params) having(boolean condition, String sqlHaving, Object… params) |
HAVING ( sql语句 ) having(“sum(age) > 10”)->having sum(age) > 10 |
func | func(Consumer consumer) func(boolean condition, Consumer consumer) |
func 方法(主要方便在出现if…else下调用不同方法能不断链) 例: func(i -> if(true) {i.eq("id", 1)} else {i.ne("id", 1)}) |
or | or() or(boolean condition)or(Consumer consumer) or(boolean condition, Consumer consumer) |
拼接 OR eq(“id”,1).or().eq(“name”,”老王”)->id = 1 or name = ‘老王’ |
and | and(Consumer consumer) and(boolean condition, Consumer consumer) |
AND 嵌套 and(i -> i.eq(“name”, “李白”).ne(“status”, “活着”)) ---> and (name = ‘李白’ and status <> ‘活着’) |
nested | nested(Consumer consumer) nested(boolean condition, Consumer consumer) |
正常嵌套 不带 AND 或者 OR nested(i -> i.eq(“name”, “李白”).ne(“status”, “活着”)) ---> (name = ‘李白’ and status <> ‘活着’) |
apply | apply(String applySql, Object… params) apply(boolean condition, String applySql, Object… params) |
拼接 sql 例: apply(“id = 1”)—>id = 1 例: apply(“date_format(dateColumn,’%Y-%m-%d’) = ‘2008-08-08′”)—>date_format(dateColumn,’%Y-%m-%d’) = ‘2008-08-08′”) 例: apply(“date_format(dateColumn,’%Y-%m-%d’) = {0}”, “2008-08-08″)—>date_format(dateColumn,’%Y-%m-%d’) = ‘2008-08-08′”) |
last | last(String lastSql) last(boolean condition, String lastSql) |
无视优化规则直接拼接到 sql 的最后 只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用 last(“limit 1”) |
exists | exists(String existsSql) exists(boolean condition, String existsSql) |
拼接 EXISTS 例: exists(“select id from table where age = 1”)—>exists (select id from table where age = 1) |
notExists | notExists(String notExistsSql) notExists(boolean condition, String notExistsSql) |
拼接 NOT EXISTS ( sql语句 ) 例: notExists(“select id from table where age = 1”)—>not exists (select id from table where age = 1) |
三、QueryWrapper
Select设置查询字段
select(String... sqlSelect)
select(Predicate<TableFieldInfo> predicate)
select(Class<T> entityClass, Predicate<TableFieldInfo> predicate)
复制代码
第二种和第三种用法可以针对字段多的情况,用于排除字段的方式,例:
queryWrapper.select(info -> info.getProperty().startsWith("test"));
复制代码
queryWrapper.select(User.class, info->!info.getColumn()
.equals("email") && !info.getColumn().equals("create_time"));
复制代码
四、UpdateWrapper
- 设置SET 字段
set(String column, Object val)
set(boolean condition, String column, Object val)
复制代码
- 例:
set("name", "老李头")
- 例:
set("name", "")
—>数据库字段值变为空字符串 - 例:
set("name", null)
—>数据库字段值变为null
2.设置SET的SQL
setSql(String sql)
复制代码
例:setSql(“name = ‘老李头'”)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END