MybatisPlus(五) 条件构造器

wapper介绍:

  用于条件封装,生成 sql 的 where 条件

|--Wrapper : 条件构造抽象类,最顶端父类
  |--AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
    |--QueryWrapper : 查询条件封装
    |--UpdateWrapper : Update 条件封装
    |--AbstractLambdaWrapper : 使用Lambda 语法
      |--LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
      |--LambdaUpdateWrapper : Lambda 更新封装Wrapper

关键字段描述:

AbstractWrapper类:

allEq

描述使用说明:全部等于 或 个别isNull

allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, Map<R, V> params, boolean null2IsNull)

allEq(BiPredicate<R, V> filter, Map<R, V> params)
allEq(BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, BiPredicate<R, V> filter, Map<R, V> params, boolean null2IsNull) 

参数说明:

类型 参数名 描述
Map<R,V> params

Key:数据库字段名
Value:字段值

boolean null2IsNull

值为true,则map的value为null时调用isNull方法,

值为false,则忽略value为null

BiPredicate<R,V> filter 过滤函数,是否允许字段传入比对条件中
boolean  condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
allEq({id:1,name:"老王",age:null}) id = 1 and name = '老王' and age is null
allEq({id:1,name:"老王",age:null}, false) id = 1 and name = '老王'
allEq((k,v) -> k.contains("a"), {id:1,name:"老王",age:null}) name = '老王' and age is null
allEq((k,v) -> k.contains("a"), {id:1,name:"老王",age:null}, false) name = '老王'

 

 

 

 

 

 

 

 

eq

描述使用说明:等于号=

eq(R column, Object val)
eq(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
 eq("name", "老王") name = '老王'

 

 

 

ne

描述使用说明:不等于号 <>

ne(R column, Object val)
ne(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
ne("name", "老王") name <> '老王'

 

 

 

 gt

描述使用说明:大于号 >

gt(R column, Object val)
gt(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
gt("age", 18) age > 18

 

 

 

 ge

描述使用说明:大于等于号  >=

ge(R column, Object val)
ge(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
ge("age", 18) age >= 18

 

 

 

lt

描述使用说明:小于号  <

lt(R column, Object val)
lt(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
lt("age", 18) age < 18

 

 

 

le

描述使用说明:小于等于号 <=

le(R column, Object val)
le(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
le("age", 18) age <= 18

 

 

 

between

描述使用说明: between 值1 AND 值2

between(R column, Object val1, Object val2)
between(boolean condition, R column, Object val1, Object val2)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
between("age", 18, 30) age between 18 and 30

 

 

 

notBetween

描述使用说明:not between 值1 AND 值2

notBetween(R column, Object val1, Object val2)
notBetween(boolean condition, R column, Object val1, Object val2)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
notBetween("age", 18, 30) age not between 18 and 30

 

 

 

like

描述使用说明:LIKE '%值%'

like(R column, Object val)
like(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
like("name", "王") name like '%王%'

 

 

 

notLike

描述使用说明:NOT LIKE '%值%'

notLike(R column, Object val)
notLike(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
notLike("name", "王") name not like '%王%'

 

 

 

likeLeft

描述使用说明:LIKE '%值'

likeLeft(R column, Object val)
likeLeft(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
likeLeft("name", "王") name like '%王'

 

 

 

likeRight

描述使用说明:LIKE '值%'

likeRight(R column, Object val)
likeRight(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
likeRight("name", "王") name like '王%'

 

 

 

notLikeLeft

描述使用说明:NOT LIKE '%值'

notLikeLeft(R column, Object val)
notLikeLeft(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
notLikeLeft("name", "王") name not like '%王'

 

 

 

notLikeRight

描述使用说明:NOT LIKE '值%'

notLikeRight(R column, Object val)
notLikeRight(boolean condition, R column, Object val)

参数说明:

类型 参数名 描述
R column 数据库字段名
Object val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
notLikeRight("name", "王") name not like '王%'

 

 

 

isNull

描述使用说明:字段名 IS NULL

isNull(R column)
isNull(boolean condition, R column)

参数说明:

类型 参数名 描述
R column 数据库字段名
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
isNull("name") name is null

 

 

 

isNotNull

描述使用说明:字段名 IS NOT NULL

isNotNull(R column)
isNotNull(boolean condition, R column)

参数说明:

类型 参数名 描述
R column 数据库字段名
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
isNotNull("name") name is not null

 

 

 

in

in(R column, Collection<?> value)
in(boolean condition, R column, Collection<?> value)

描述使用说明:字段 IN (value.get(0), value.get(1), ...)

参数说明:

类型 参数名 描述
R column 数据库字段名
Collection<?> val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
in("age",{1,2,3}) age in (1,2,3)

 

 
 
in(R column, Object... values)
in(boolean condition, R column, Object... values)

描述使用说明:字段 IN (v0, v1, ...)

参数说明:

类型 参数名 描述
R column 数据库字段名
Collection<?> val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
in("age", 1, 2, 3) age in (1,2,3)

 

 

 

notIn

notIn(R column, Collection<?> value)
notIn(boolean condition, R column, Collection<?> value)

描述使用说明:字段 NOT IN (value.get(0), value.get(1), ...)

参数说明:

类型 参数名 描述
R column 数据库字段名
Collection<?> val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
notIn("age",{1,2,3}) age not in (1,2,3)

 

 
 
notIn(R column, Object... values)
notIn(boolean condition, R column, Object... values)

描述使用说明:字段 NOT IN (v0, v1, ...)

参数说明:

类型 参数名 描述
R column 数据库字段名
Collection<?> val 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
notIn("age", 1, 2, 3) age not in (1,2,3)

 

 

 

inSql

描述使用说明:字段 IN ( sql语句 )

inSql(R column, String inValue)
inSql(boolean condition, R column, String inValue)

参数说明:

类型 参数名 描述
R column 数据库字段名
String inValus 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应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

描述使用说明:字段 NOT IN ( sql语句 )

notInSql(R column, String inValue)
notInSql(boolean condition, R column, String inValue)

参数说明:

类型 参数名 描述
R column 数据库字段名
String inValus 赋值
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
notInSql("age", "1,2,3,4,5,6") age not in (1,2,3,4,5,6)
notInSql("id", "select id from table where id < 3") id not in (select id from table where id < 3)

 

 

 

 

groupBy

描述使用说明:分组:GROUP BY 字段, ...

groupBy(R... columns)
groupBy(boolean condition, R... columns)

参数说明:

类型 参数名 描述
R column 数据库字段名
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
groupBy("id", "name") group by id,name

 

 

 

orderByAsc

描述使用说明:排序:ORDER BY 字段, ... ASC

orderByAsc(R... columns)
orderByAsc(boolean condition, R... columns)

参数说明:

类型 参数名 描述
R column 数据库字段名
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
orderByAsc("id", "name") order by id ASC,name ASC

 

 

 

orderByDesc

描述使用说明:排序:ORDER BY 字段, ... DESC

orderByDesc(R... columns)
orderByDesc(boolean condition, R... columns)

参数说明:

类型 参数名 描述
R column 数据库字段名数组
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
orderByDesc("id", "name") order by id DESC,name DESC

 

 

 

orderBy

描述使用说明:排序:ORDER BY 字段, ...

orderBy(boolean condition, boolean isAsc, R... columns)

参数说明:

类型 参数名 描述
R column 数据库字段名
boolean isAsc asc 升序
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
orderBy(true, true, "id", "name") order by id ASC,name ASC

 

 

 

having

描述使用说明:HAVING ( sql语句 )

having(String sqlHaving, Object... params)
having(boolean condition, String sqlHaving, Object... params)

参数说明:

类型 参数名 描述
String sqlHaving sql语句
Obiect params 参数数组
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
having("sum(age) > 10") having sum(age) > 10
having("sum(age) > {0}", 11) having sum(age) > 11

 

 

 

 

func

描述使用说明:func 方法(主要方便在出现if...else下调用不同方法能不断链)

func(Consumer<Children> consumer)
func(boolean condition, Consumer<Children> consumer)

参数说明:

类型 参数名 描述
Consumer<Children> consumer 消费函数
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码

func(i -> if(true) {

      i.eq("id", 1)

    }else {

      i.ne("id", 1)

    }

  )

 

 

 

 

 

 

 

or

1、拼接 OR

注意事项:

  主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)

or()
or(boolean condition)

案例:

java代码 对应SQL
eq("id",1).or().eq("name","老王") id = 1 or name = '老王'

 

 

2、OR 嵌套

or(Consumer<Param> consumer)
or(boolean condition, Consumer<Param> consumer)

参数说明:

类型 参数名 描述
Consumer<Children> consumer 消费函数
boolean condition 表示该条件是否加入最后生成的sql中

案例:

java代码 对应SQL
or(i -> i.eq("name", "李白").ne("status", "活着")) or (name = '李白' and status <> '活着')

 

 

 

and

描述使用说明:AND 嵌套

and(Consumer<Param> consumer)
and(boolean condition, Consumer<Param> consumer)

案例:

java代码 对应SQL
and(i -> i.eq("name", "李白").ne("status", "活着")) and (name = '李白' and status <> '活着')

 

 

 

nested

描述使用说明:正常嵌套 不带 AND 或者 OR

nested(Consumer<Param> consumer)
nested(boolean condition, Consumer<Param> consumer)

案例:

java代码 对应SQL
nested(i -> i.eq("name", "李白").ne("status", "活着")) (name = '李白' and status <> '活着')

 

 

 

apply

描述使用说明:拼接 sql

注意事项
  该方法可用于数据库函数 动态入参的params对应前面applySql内部的{index}部分.这样是不会有sql注入风险的,反之会有!

apply(String applySql, Object... params)
apply(boolean condition, String applySql, Object... params)

案例:

java代码 对应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

描述使用说明:无视优化规则直接拼接到 sql 的最后

注意事项:
  能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用

last(String lastSql)
last(boolean condition, String lastSql)

案例:

java代码
 last("limit 1")

 

 

 

exists

描述使用说明:拼接 EXISTS ( sql语句 )

exists(String existsSql)
exists(boolean condition, String existsSql)

案例:

java代码 对应SQL
exists("select id from table where age = 1") exists (select id from table where age = 1)

 

 

 

 notExists

描述使用说明:拼接 NOT EXISTS ( sql语句 )

notExists(String notExistsSql)
notExists(boolean condition, String notExistsSql)

案例:

java代码 对应SQL
notExists("select id from table where age = 1") not exists (select id from table where age = 1)

 

 

 

QueryWrapper类:

说明:

  继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取

select

描述使用说明:设置查询字段

select(String... sqlSelect)
select(Predicate<TableFieldInfo> predicate)
select(Class<T> entityClass, Predicate<TableFieldInfo> predicate)

说明:

  以上方法分为两类,第二类方法为:过滤查询字段(主键除外),入参不包含 class 的调用前需要wrapper内的entity属性有值! 这两类方法重复调用以最后一次为准

案例:

java代码
select("id", "name", "age")
select(i -> i.getProperty().startsWith("test"))

 

 

 

 

UpdateWrapper类

说明:

  继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取!

set

描述使用说明:SQL SET 字段

set(String column, Object val)
set(boolean condition, String column, Object val)

案例:

java代码 对应SQL
set("name", "老李头")  
 set("name", "") 数据库字段值变为空字符串
set("name", null) 数据库字段值变为null

 

 

 

 

 

setSql

描述使用说明:设置 SET 部分 SQL

setSql(String sql)

案例:

java代码
setSql("name = '老李头'")

 

 

 

lambda

描述使用说明:获取 LambdaWrapper

在QueryWrapper中是获取LambdaQueryWrapper

在UpdateWrapper中是获取LambdaUpdateWrapper

posted @ 2023-03-11 20:08  向大海  阅读(88)  评论(0编辑  收藏  举报