MybatisPlus条件构造器(上)

目录

[7 条件构造器](#7 条件构造器)

[7.1 条件构造器介绍](#7.1 条件构造器介绍)

[7.2 常用方法](#7.2 常用方法)

补充说明

[7.3 UpdateWrapper](#7.3 UpdateWrapper)


7 条件构造器

7.1 条件构造器介绍

  1. Wrapper : 条件构造抽象类,是整个条件构造器的最顶端父类,定义了条件构造的基础规范。
  2. AbstractWrapper : 所有条件构造器的父类,用于封装查询 / 更新的条件,生成 SQL 的 WHERE 子句(支持eq、like等条件拼接)。
  3. QueryWrapper : 专门用于构造查询 / 删除操作的条件(对应SELECT/DELETE语句的WHERE子句)。
  4. UpdateWrapper : 专门用于构造更新操作的条件(对应UPDATE语句的SET和WHERE子句,支持直接通过set方法设置更新字段)。
  5. AbstractLambdaWrapper : Lambda 风格条件构造器的父类,支持通过实体类的方法引用(如User::getName)指定字段,避免硬编码字段名。
  6. LambdaQueryWrapper :Lambda 风格的查询 / 删除条件构造器(基于AbstractLambdaWrapper,功能同QueryWrapper,但用 Lambda 指定字段)。
  7. LambdaUpdateWrapper : Lambda 风格的更新条件构造器(基于AbstractLambdaWrapper,功能同UpdateWrapper,但用 Lambda 指定字段)。
    注:MybatisPlus提供的带有条件构造器的内置方法,入参类型都是Wrapper,说明只要是Wrapper的子类都可以作为入参。

7.2 常用方法

  1. QueryWrapper常用方法(含 condition 参数)
方法示例 对应 SQL 说明 condition 参数用法
eq(R column, Object value) = value 等于 eq(boolean condition, R column, Object value)例:eq(age != null, "age", age)
ne(R column, Object value) != value 不等于 ne(condition, column, value)
gt(R column, Object value) > value 大于 gt(condition, column, value)
ge(R column, Object value) >= value 大于等于 ge(condition, column, value)
lt(R column, Object value) < value 小于 lt(condition, column, value)
le(R column, Object value) <= value 小于等于 le(condition, column, value)
like(R column, Object value) LIKE '%value%' 全模糊 like(condition, column, value)
likeLeft(R column, Object value) LIKE '%value' 左模糊 likeLeft(condition, column, value)
likeRight(R column, Object value) LIKE 'value%' 右模糊 likeRight(condition, column, value)
isNull(R column) IS NULL 字段为空 isNull(condition, column)
isNotNull(R column) IS NOT NULL 字段不为空 isNotNull(condition, column)
in(R column, Collection<?> values) IN (v1,v2...) 包含 in(condition, column, values)
inSql(R column, String inValue) IN (sql语句) 子查询包含 inSql(condition, column, inValue)例:inSql(id != null, "id", "select id from tx_user where id <=3")
notIn(R column, Collection<?> values) NOT IN (v1,v2...) 不包含 notIn(condition, column, values)
notInSql(R column, String inValue) NOT IN (sql语句) 子查询不包含 notInSql(condition, column, inValue)
between(R column, Object val1, Object val2) BETWEEN val1 AND val2 区间匹配 between(condition, column, val1, val2)
orderByAsc(R... columns) ORDER BY column ASC 升序排序 orderByAsc(condition, columns)
orderByDesc(R... columns) ORDER BY column DESC 降序排序 orderByDesc(condition, columns)
or() OR 逻辑或(默认是 AND) or(condition)(condition 为 true 时才拼接 OR)
and(Consumer<Param> consumer) AND (分组条件) 分组 AND(括号包裹) 无单独 condition 参数,通过 lambda 内逻辑控制例:and(i -> i.gt("age",20).or().isNull("email"))
select(String... columns) SELECT column1,column2... 指定查询字段 无 condition 参数,直接指定字段例:select("name", "age")
select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) SELECT 符合条件的字段 动态筛选字段 例:select(User.class, info -> !info.getColumn().equals("password"))(排除 password 字段)
  1. UpdateWrapper 常用方法(含 condition 参数)
    UpdateWrapper 除了支持 QueryWrapper 的 所有条件方法 (用于拼接 WHERE子句),还额外提供了 SET子句的构造方法:
方法示例 对应 SQL 说明 condition 参数用法
set(R column, Object value) SET column = value 设置字段值 set(boolean condition, R column, Object value)例:set(name != null, "name", name)
setSql(String sql) SET sql语句 直接拼接 SET 子句(支持复杂表达式) setSql(boolean condition, String sql)例:setSql(age > 18, "age = age + 1")
eq(R column, Object value) WHERE column = value 等于(同 QueryWrapper) eq(condition, column, value)
ne(R column, Object value) WHERE column != value 不等于(同 QueryWrapper) ne(condition, column, value)
in(R column, Collection<?> values) WHERE column IN (v1,v2...) 包含(同 QueryWrapper) in(condition, column, values)
inSql(R column, String inValue) WHERE column IN (sql语句) 子查询包含(同 QueryWrapper) inSql(condition, column, inValue)
and(Consumer<Param> consumer) AND (分组条件) 分组 AND(括号包裹 WHERE 条件) 例:and(i -> i.gt("age",20).or().isNull("email"))

补充说明

  1. inSql/notInSql :用于子查询场景,直接拼接 SQL 片段作为IN/NOT IN的参数;
  2. select方法:支持指定具体字段或动态筛选字段(排除敏感字段);
  3. and(lambda)分组 :lambda 内的条件会被括号包裹,实现AND (A OR B)的逻辑,优先级更高;
  4. condition 参数 :所有带条件控制的方法,都可通过boolean表达式动态决定是否拼接该条件(避免手动if判断)。

7.3 UpdateWrapper

复制代码
@Test
public void test07() {
    //将(年龄大于20或邮箱为null)并且用户名中包含有a的用户信息修改
    //组装set子句以及修改条件
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    //lambda表达式内的逻辑优先运算
    updateWrapper
            .set("age", 18)
            .set("email", "user@qcby.com")
            .like("name", "名")
            .and(i -> i.gt("age", 20).or().isNull("email"));
    //这里必须要创建User对象,否则无法应用自动填充。如果没有自动填充,可以设置为null
    //user.setName("张三");
    //int result = userMapper.update(user, updateWrapper);
    int result = userMapper.update(null, updateWrapper);
    System.out.println(result);
}
相关推荐
CesareCheung几秒前
SonarQube安装下载及代码覆盖率使用
数据库·代码覆盖率
yejqvow123 分钟前
如何使用可视化查询生成器_免敲代码的多表JOIN配置
jvm·数据库·python
2301_815279524 分钟前
学生党预算有限怎么选HTML函数工具_低配高性价比教程【教程】
jvm·数据库·python
devilnumber6 分钟前
java的NIO框架Netty、Mina、Grizzly 和 Jetty 四种对比
java·nio·java面试·jetty
努力进修9 分钟前
【java-数据结构】Java优先级队列揭秘:堆的力量让数据处理飞起来
java·开发语言·数据结构
亚历克斯神9 分钟前
Java 代码质量与静态分析:2026 实战指南
java·spring·微服务
@hhr9 分钟前
使用java对接火山方舟doubao-seedance-1.5-pro 模型进行视频生成
java·python·音视频
廋到被风吹走10 分钟前
【LangChain4j】Java 生态中最灵活、功能最强大的纯 Java 大模型应用开发框架(支持声明式@AiService与复杂RAG/Agent)
java·开发语言·python
2201_7610405911 分钟前
如何处理SQL中的位运算_掌握BITWISE函数应用场景
jvm·数据库·python
艾克杏12 分钟前
初学Java之范型
java·开发语言