📚 MyBatis-Plus 条件构造器全功能对照表

Administrator
发布于 2025-06-12 / 2 阅读
0
0

📚 MyBatis-Plus 条件构造器全功能对照表

功能

方法

说明

是否支持条件判断

常用场景

等于

eq

等于(=)

精确匹配查询

不等于

ne

不等于(!=)

排除特定值

大于

gt

大于(>)

数值范围查询

大于等于

ge

大于等于(>=)

数值范围查询

小于

lt

小于(<)

数值范围查询

小于等于

le

小于等于(<=)

数值范围查询

模糊匹配

like

类似 %xxx%

模糊查询(包含)

左模糊

likeLeft

类似 %xxx

模糊查询(后缀)

右模糊

likeRight

类似 xxx%

模糊查询(前缀)

字段为空

isNull

判断字段 IS NULL

查询空值

字段非空

isNotNull

判断字段 IS NOT NULL

查询非空

in 范围

in

in (集合)

批量查询

not in 范围

notIn

not in (集合)

批量排除

between 区间

between

between A and B

范围查询

not between 区间

notBetween

not between A and B

排除范围查询

or 逻辑

or

添加 or 条件

组合查询

and 逻辑

and

添加 and 条件

组合查询

嵌套查询

nested

括号嵌套查询

复杂逻辑

排序

orderByAsc

按升序排序

排序

排序

orderByDesc

按降序排序

排序

字段匹配

apply

自定义 SQL

SQL函数、子查询

自定义 SQL

last

追加到 SQL 最后

手动添加 limit、for update

exists 子查询

exists

exists (子查询)

存在性判断

not exists 子查询

notExists

not exists (子查询)

存在性判断

分组

groupBy

SQL 分组

聚合查询

having

having

SQL 分组条件

聚合条件


✅ 重点技巧总结

技巧

说明

条件判断

.eq(条件, 字段, 值)条件为false会自动忽略该查询

嵌套组合

.and(w -> w.eq(...).or().eq(...))

模糊查询

like 支持模糊, likeLeftlikeRight 可控制模糊方向

排序写法

支持链式调用,.orderByAsc().orderByDesc()

原生 SQL

apply 可以写自定义 SQL,安全拼接


🔥 实战组合案例

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
    .eq(name != null, User::getName, name)
    .ne(status != null, User::getStatus, status)
    .gt(ageMin != null, User::getAge, ageMin)
    .lt(ageMax != null, User::getAge, ageMax)
    .like(email != null, User::getEmail, email)
    .in(!CollectionUtils.isEmpty(idList), User::getId, idList)
    .orderByAsc(User::getCreateTime)
    .orderByDesc(User::getAge);

支持:

  • 条件自动忽略

  • 批量 in 查询

  • 多条件排序

  • 灵活组合写法


🔨 推荐封装工具

你可以写一个 QueryWrapperUtils

public class QueryWrapperUtils {
    public static <T> void safeEq(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column, Object value) {
        if (value != null) {
            wrapper.eq(column, value);
        }
    }
    public static <T> void safeIn(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column, Collection<?> values) {
        if (values != null && !values.isEmpty()) {
            wrapper.in(column, values);
        }
    }
}

这样可以优雅调用:

QueryWrapperUtils.safeEq(queryWrapper, User::getName, req.getName());
QueryWrapperUtils.safeIn(queryWrapper, User::getId, req.getIdList());


评论