MyBatis-Plus 比较运算符

🧩 一、基本比较运算符

方法 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,可避免硬编码列名错误:

plain 复制代码
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getStatus, 1)
       .ge(User::getAge, 18)
       .like(User::getName, "张")
       .orderByDesc(User::getCreateTime);

✅ 优点:

  • 自动推导字段名;
  • 字段重构安全;
  • IDE 自动提示。
相关推荐
泡海椒16 分钟前
JQuick-SQL JQuickTable 模型:XML 动态 SQL 的表封装边界
xml·数据库·sql
ss2731 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 28 PostgreSQL MVCC机制介绍
数据库·笔记·postgresql
奇牙coding2 小时前
doubao-seed-2.1-pro 报 HTTP 401 怎么办?Key 正确也要检查请求头和端点
网络·数据库·http·ai
_Evan_Yao7 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
梓豪csd8 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼8 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
thefool1122669 小时前
TCP 1
java·1024程序员节
不脱发的程序猿10 小时前
纳指ETF量化策略
数据库·人工智能·1024程序员节
程序员塔塔喵11 小时前
【MySQL篇|第一篇】索引失效的情况
数据库·mysql·索引失效
paopaokaka_luck11 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节