电商思维做招聘网站,seo关键词优化案例,建网站做联盟,谷歌应用商店app下载#x1f340; 前言
博客地址#xff1a;
CSDN#xff1a;https://blog.csdn.net/powerbiubiu
#x1f44b; 简介 上一章介绍了新增的操作#xff0c;后续删除#xff0c;更新#xff0c;查询的操作相对新增要复杂一些#xff0c;因为有些方法的使用涉及到了条件 前言
博客地址
CSDNhttps://blog.csdn.net/powerbiubiu 简介 上一章介绍了新增的操作后续删除更新查询的操作相对新增要复杂一些因为有些方法的使用涉及到了条件比如sql中查询的时候需要条件筛选比如where age 18where name like %A%等条件。所以本章专门介绍一下Mybatis-Plus提供的条件构造器的使用。 Mybatis-Plus对条件构造器详细介绍的官网地址 正文
1 条件构造器的介绍
在 Mybatis-Plus 中利用条件构造器 Wrapper可以帮助我们组装各种 where 条件具体实现类如 QueryWrapper、 UpdateWrapper等在查询、更新、删除操作中会被频繁用到。 Wrapper条件构造抽象类的继承关系
AbstractWrapper 查询条件封装用于生成 sql 中的 where 语句 QueryWrapper查询使用条件封装操作类UpdateWrapper 更新使用条件封装操作类AbstractLambdaWrapper 使用 Lambda 表达式封装 wrapper LambdaQueryWrapper 查询使用 Lambda 语法封装条件LambdaUpdateWrapper 更新使用 Lambda 语法封装条件 AbstractChainWrapper链式查询条件封装 QueryChainWrapper查询使用封装操作类支持链式调用UpdateChainWrapper更新使用封装操作类支持链式调用LambdaQueryChainWrapper查询使用 Lambda 语法封装条件支持链式调用LambdaUpdateChainWrapper更新使用 Lambda 语法封装条件支持链式调用
其中我本人经常用的构造器是LambdaQueryWrapper
2 AbstractWrapper 说明 QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件注意: entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为 allEq
全部eq(或个别isNull)
// params : key 为数据库字段名, value 为字段值
allEq(MapR, V params)
// null2IsNull : 为 true 则在 map 的 value 为 null 时调用 isNull 方法,为 false 时则忽略 value 为null的
allEq(MapR, V params, boolean null2IsNull)
allEq(boolean condition, MapR, V params, boolean null2IsNull)例1: allEq({id:1,name:老王,age:null})—id 1 and name 老王 and age is null例2: allEq({id:1,name:老王,age:null}, false)—id 1 and name 老王
// filter : 过滤函数,是否允许字段传入比对条件中
allEq(BiPredicateR, V filter, MapR, V params)
// 同上
allEq(BiPredicateR, V filter, MapR, V params, boolean null2IsNull)
allEq(boolean condition, BiPredicateR, V filter, MapR, V params, boolean null2IsNull) 例1: allEq((k,v) - k.contains(a), {id:1,name:老王,age:null})—name 老王 and age is null例2: 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)例: eq(name, 老王)---name 老王
ne
不等于
ne(R column, Object val)
ne(boolean condition, R column, Object val)例: ne(name, 老王)---name 老王
gt
大于
gt(R column, Object val)
gt(boolean condition, R column, Object val)例: gt(age, 18)---age 18
ge
大于等于
ge(R column, Object val)
ge(boolean condition, R column, Object val)例: ge(age, 18)---age 18
lt
小于
lt(R column, Object val)
lt(boolean condition, R column, Object val)例: lt(age, 18)---age 18
le
小于等于
le(R column, Object val)
le(boolean condition, R column, Object val)例: 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)例: 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)例: notBetween(age, 18, 30)---age not between 18 and 30
like
LIKE ‘%值%’
like(R column, Object val)
like(boolean condition, R column, Object val)例: like(name, 王)---name like %王%
notLike
NOT LIKE ‘%值%’
notLike(R column, Object val)
notLike(boolean condition, R column, Object val)例: notLike(name, 王)---name not like %王%
likeLeft
LIKE ‘值%’
likeRight(R column, Object val)
likeRight(boolean condition, R column, Object val)例: likeLeft(name, 王)---name like %王
likeRight
LIKE ‘值%’
likeRight(R column, Object val)
likeRight(boolean condition, R column, Object val)例: likeRight(name, 王)---name like 王%
notLikeLeft
NOT LIKE ‘%值’
notLikeLeft(R column, Object val)
notLikeLeft(boolean condition, R column, Object val)例: notLikeLeft(name, 王)---name not like %王
notLikeRight
NOT LIKE ‘值%’
notLikeRight(R column, Object val)
notLikeRight(boolean condition, R column, Object val)例: notLikeRight(name, 王)---name not like 王%
isNull
字段 IS NOT NULL
isNotNull(R column)
isNotNull(boolean condition, R column)例: isNotNull(name)---name is not null
in
字段 IN (value.get(0), value.get(1), …)
in(R column, Collection? value)
in(boolean condition, R column, Collection? value)例: in(age,{1,2,3})---age in (1,2,3)
字段 IN (v0, v1, …)
in(R column, Object... values)
in(boolean condition, R column, Object... values)例: in(age, 1, 2, 3)---age in (1,2,3)
notIn
字段 NOT IN (value.get(0), value.get(1), …)
notIn(R column, Collection? value)
notIn(boolean condition, R column, Collection? value)例: notIn(age,{1,2,3})---age not in (1,2,3)
字段 NOT IN (v0, v1, …)
notIn(R column, Object... values)
notIn(boolean condition, R column, Object... values)例: 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)例: 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)例: 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)例: groupBy(id, name)---group by id,name
orderByAsc
排序ORDER BY 字段, … ASC
orderByAsc(R... columns)
orderByAsc(boolean condition, R... columns)例: orderByAsc(id, name)---order by id ASC,name ASC
orderByDesc
排序ORDER BY 字段, … DESC
orderByDesc(R... columns)
orderByDesc(boolean condition, R... columns)例: orderByDesc(id, name)---order by id DESC,name DESC
orderBy
排序ORDER BY 字段, …
orderBy(boolean condition, boolean isAsc, R... columns)例: 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)例: having(sum(age) 10)---having sum(age) 10例: having(sum(age) {0}, 11)---having sum(age) 11
func
func 方法(主要方便在出现if…else下调用不同方法能不断链)
func(ConsumerChildren consumer)
func(boolean condition, ConsumerChildren consumer)例: func(i - if(true) {i.eq(id, 1)} else {i.ne(id, 1)})
or
拼接OR
// 主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)
or()
or(boolean condition)例: eq(id,1).or().eq(name,老王)---id 1 or name 老王
OR 嵌套
or(ConsumerParam consumer)
or(boolean condition, ConsumerParam consumer)例: or(i - i.eq(name, 李白).ne(status, 活着))---or (name 李白 and status 活着)
and
AND 嵌套
and(ConsumerParam consumer)
and(boolean condition, ConsumerParam consumer)例: and(i - i.eq(name, 李白).ne(status, 活着))---and (name 李白 and status 活着)
nested
正常嵌套 不带 AND 或者 OR
nested(ConsumerParam consumer)
nested(boolean condition, ConsumerParam consumer)例: 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)例: 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)例: last(limit 1)
exists
拼接 EXISTS ( sql语句 )
exists(String existsSql)
exists(boolean condition, String existsSql)例: 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)例: notExists(select id from table where age 1)---not exists (select id from table where age 1)
3 QueryWrapper 说明: 继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件 及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取 select
设置查询字段 说明: 以上方法分为两类. 第二类方法为:过滤查询字段(主键除外),入参不包含 class 的调用前需要wrapper内的entity属性有值! 这两类方法重复调用以最后一次为准 select(String... sqlSelect)
select(PredicateTableFieldInfo predicate)
select(ClassT entityClass, PredicateTableFieldInfo predicate)例: select(id, name, age)例: select(i - i.getProperty().startsWith(test))
4 UpdateWrapper 说明: 继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件 及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取! set
SQL SET 字段
set(String column, Object val)
set(boolean condition, String column, Object val)例: set(name, 老李头)例: set(name, )---数据库字段值变为空字符串例: set(name, null)---数据库字段值变为null
setSql
设置 SET 部分 SQL
setSql(String sql)例: setSql(name 老李头)
lambda
获取 LambdaWrapper 在QueryWrapper中是获取LambdaQueryWrapper 在UpdateWrapper中是获取LambdaUpdateWrapper
✏ 总结
本章节主要介绍下Mybatis-Plus中条件构造器的介绍及使用时对应SQL语句中是如何编写的。 欢迎关注我的公众号