MyBatis-Plus 比较运算符

38 阅读2分钟

🧩 一、基本比较运算符

方法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 自动提示。