好,这几个在 Java 里非常常见,尤其是在 MyBatis / MyBatis-Plus / JPA / 条件构造器 / 查询 DSL 里。我们一次讲清楚,记完就不容易混 👍
一、这 6 个缩写从哪来?
它们本质都来自 英文比较运算符的缩写:
| 缩写 | 英文全称 | 中文含义 |
|---|---|---|
eq | equal | 等于 |
ne | not equal | 不等于 |
gt | greater than | 大于 |
ge | greater than or equal | 大于等于 |
lt | less than | 小于 |
le | less than or equal | 小于等于 |
👉 在 Java 原生语法 里你看不到 eq / gt,
👉 它们主要出现在 ORM / 查询封装层。
二、和 Java 原生运算符的对应关系
| ORM 写法 | Java 运算符 | SQL |
|---|---|---|
eq | == | = |
ne | != | <> 或 != |
gt | > | > |
ge | >= | >= |
lt | < | < |
le | <= | <= |
三、MyBatis-Plus 中的典型用法(最常见)
QueryWrapper<User> qw = new QueryWrapper<>();
qw.eq("status", 1); // status = 1
qw.ne("deleted", 1); // deleted != 1
qw.gt("age", 18); // age > 18
qw.ge("score", 60); // score >= 60
qw.lt("age", 65); // age < 65
qw.le("salary", 10000); // salary <= 10000
生成的 SQL 类似:
WHERE status = 1
AND deleted != 1
AND age > 18
AND score >= 60
AND age < 65
AND salary <= 10000
四、LambdaQueryWrapper(更安全,推荐)
LambdaQueryWrapper<User> qw = new LambdaQueryWrapper<>();
qw.eq(User::getStatus, 1)
.gt(User::getAge, 18)
.le(User::getSalary, 10000);
✅ 优点:
- 字段名不写字符串
- 改字段名不会出 bug
- IDE 自动补全
五、JPA / Specification 中的等价含义
虽然 JPA 不直接叫 gt,但含义完全一致:
cb.greaterThan(root.get("age"), 18); // gt
cb.lessThan(root.get("age"), 60); // lt
cb.equal(root.get("status"), 1); // eq
cb.notEqual(root.get("status"), 0); // ne
六、和 == / equals 的重要区别(新手必踩坑)
❌ 错误理解
qw.eq("name", "Tom"); // 不是 Java 的 ==
✅ 实际含义
WHERE name = 'Tom'
👉 eq 是 SQL 层比较,不是 Java 对象比较
七、记忆口诀(面试 / 实战都好用)
等不等看 e,
大不大看 g,
小不小看 l,
有等号加 e
eq:等于ne:不等于gt/ge:大于 / 大于等于lt/le:小于 / 小于等于
八、常见使用场景总结
✔ 条件查询
✔ 动态 SQL
✔ 分页筛选
✔ 后台管理系统
✔ 统计 / 区间查询
如果你愿意,我也可以帮你:
- 🔥 画一张对照速查表(可打印)
- 🔥 结合你现在的项目写真实业务示例
- 🔥 对比 MyBatis vs MyBatis-Plus 用法
你现在是在 写查询条件 还是 准备面试 Java 后端?