宋子宪博客

Mybatis Plus条件构造器详细说明

说明:

警告:

不支持以及不赞成在 RPC 调用中把 Wrapper 进行传输

  1. wrapper 很重
  2. 传输 wrapper 可以类比为你的 controller 用 map 接收值(开发一时爽,维护火葬场)
  3. 正确的 RPC 调用姿势是写一个 DTO 进行传输,被调用方再根据 DTO 执行相应的操作
  4. 我们拒绝接受任何关于 RPC 传输 Wrapper 报错相关的 issue 甚至 pr

#AbstractWrapper

说明:

QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类
用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件
注意: entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为

#allEq

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

个别参数说明:

params : key为数据库字段名,value为字段值
null2IsNull : 为true则在mapvaluenull时调用 isNull 方法,为false时则忽略valuenull

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) 

个别参数说明:

filter : 过滤函数,是否允许字段传入比对条件中
paramsnull2IsNull : 同上

#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)

#notBetween

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

#like

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

#notLike

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

#likeLeft

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

#likeRight

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

#isNull

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

#isNotNull

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

#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)

#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)

#inSql

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

#notInSql

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

#groupBy

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

#orderByAsc

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

#orderByDesc

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

#orderBy

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

#having

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

#or

or()
or(boolean condition)

注意事项:

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

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

#and

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

#nested

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

#apply

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

注意事项:

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

#last

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

注意事项:

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

#exists

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

#notExists

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

#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属性有值! 这两类方法重复调用以最后一次为准

#excludeColumns @Deprecated

已从3.0.5版本上移除此方法!

#UpdateWrapper

说明:

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

#set

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

#setSql

setSql(String sql)

#lambda

#使用 Wrapper 自定义SQL

需求来源:

在使用了mybatis-plus之后, 自定义SQL的同时也想使用Wrapper的便利应该怎么办? 在mybatis-plus版本3.0.7得到了完美解决 版本需要大于或等于3.0.7, 以下两种方案取其一即可

#Service.java

mysqlMapper.getAll(Wrappers.<MysqlData>lambdaQuery().eq(MysqlData::getGroup, 1));

#方案一 注解方式 Mapper.java

@Select("select * from mysql_data ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);

#方案二 XML形式 Mapper.xml

<select id="getAll" resultType="MysqlData">
    SELECT * FROM mysql_data ${ew.customSqlSegment}
</select>

#kotlin使用wrapper

kotlin 可以使用 QueryWrapperUpdateWrapper 但无法使用 LambdaQueryWrapperLambdaUpdateWrapper
如果想使用 lambda 方式的 wrapper 请使用 KtQueryWrapperKtUpdateWrapper

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »