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

Administrator
发布于 2025-06-12 / 12 阅读
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 支持模糊, likeLeft、likeRight 可控制模糊方向

排序写法

支持链式调用,.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());


评论