🧩 一、基本比较运算符
| 方法 | SQL 表达式 | 含义 | 示例 |
|---|
eq("column", value) | column = value | 等于 | .eq("status", 1) |
ne("column", value) | column <> value | 不等于 | .ne("age", 18) |
gt("column", value) | column > value | 大于 | .gt("score", 90) |
ge("column", value) | column >= value | 大于等于 | .ge("age", 18) |
lt("column", value) | column < value | 小于 | .lt("age", 60) |
le("column", value) | column <= value | 小于等于 | .le("price", 1000) |
between("column", val1, val2) | column BETWEEN val1 AND val2 | 范围查询 | .between("age", 18, 30) |
notBetween("column", val1, val2) | column NOT BETWEEN val1 AND val2 | 范围排除 | .notBetween("date", "2024-01-01", "2024-12-31") |
🔍 二、模糊匹配(字符串 LIKE 类)
| 方法 | SQL 表达式 | 含义 | 示例 |
|---|
like("column", value) | column LIKE '%value%' | 包含 | .like("name", "张") |
notLike("column", value) | column NOT LIKE '%value%' | 不包含 | .notLike("name", "测试") |
likeLeft("column", value) | column LIKE '%value' | 右匹配 | .likeLeft("suffix", ".jpg") |
likeRight("column", value) | column LIKE 'value%' | 左匹配 | .likeRight("prefix", "user_") |
📋 三、集合运算(IN / NOT IN)
| 方法 | SQL 表达式 | 含义 | 示例 |
|---|
in("column", Collection<?>) | column IN (...) | 包含于集合中 | .in("id", Arrays.asList(1,2,3)) |
notIn("column", Collection<?>) | column NOT IN (...) | 不在集合中 | .notIn("id", ids) |
inSql("column", sqlSubquery) | column IN (子查询SQL) | SQL子查询 | .inSql("dept_id", "SELECT id FROM dept WHERE type='A'") |
notInSql("column", sqlSubquery) | column NOT IN (子查询SQL) | SQL子查询 | .notInSql("id", "SELECT id FROM blacklist") |
🧠 四、NULL 判断
| 方法 | SQL 表达式 | 含义 | 示例 |
|---|
isNull("column") | column IS NULL | 为空 | .isNull("deleted_at") |
isNotNull("column") | column IS NOT NULL | 不为空 | .isNotNull("email") |
⚙️ 五、嵌套与逻辑条件
| 方法 | 含义 | 示例 |
|---|
and(Consumer<Wrapper>) | 与 (AND) 条件组 | .and(w -> w.eq("a", 1).or().eq("b", 2)) |
or() | 添加一个 OR | .eq("a", 1).or().eq("b", 2) |
or(Consumer<Wrapper>) | 带括号的 OR 条件组 | .or(w -> w.eq("a", 1).ne("b", 2)) |
nested(Consumer<Wrapper>) | 嵌套条件(加括号) | .nested(w -> w.eq("a", 1).or().eq("b", 2)) |
apply(String sql, Object... params) | 原生 SQL 片段 | .apply("date_format(create_time,'%Y-%m-%d') = {0}", "2025-11-11") |
exists(String sql) | 存在子查询 | .exists("SELECT 1 FROM dept WHERE dept.id = user.dept_id") |
notExists(String sql) | 不存在子查询 | .notExists("SELECT 1 FROM blacklist WHERE blacklist.user_id = user.id") |
🧩 六、排序、分组、分页控制
| 方法 | SQL 表达式 | 含义 | 示例 |
|---|
orderByAsc("column") | ORDER BY column ASC | 升序排序 | .orderByAsc("create_time") |
orderByDesc("column") | ORDER BY column DESC | 降序排序 | .orderByDesc("id") |
orderBy(boolean condition, boolean asc, String... columns) | 条件排序 | .orderBy(true, false, "update_time") | |
groupBy("columns...") | GROUP BY ... | 分组 | .groupBy("dept_id") |
having(String sql, Object... params) | HAVING ... | 分组后筛选 | .having("count(id) > {0}", 1) |
last(String sql) | SQL 尾部追加 | .last("LIMIT 1") | |
limit(int offset, int size) (MyBatis-Plus 3.5+) | 限制结果数 | .last("LIMIT 0, 10")(或新版 limit(0,10)) | |
🧩 七、Lambda 风格(推荐写法)
若使用 LambdaQueryWrapper,可避免硬编码列名错误:
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getStatus, 1)
.ge(User::getAge, 18)
.like(User::getName, "张")
.orderByDesc(User::getCreateTime);
✅ 优点:
- 自动推导字段名;
- 字段重构安全;
- IDE 自动提示。