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);
}
相关推荐
李兆龙的博客4 分钟前
从一到无穷大 #91:从 Habitat 看存储平台的整合与分工
数据库·人工智能·架构
木井巳12 分钟前
【记忆化搜索】斐波那契数
java·算法·leetcode·深度优先·剪枝·推荐算法
geovindu23 分钟前
java: Task Scheduler
java·开发语言·后端
神奇小梵28 分钟前
java的特殊语法点,与常规语言相异的点
java·开发语言
惜分飞32 分钟前
记录一次0丢失的ORA-00354: 损坏重做日志块标头故障恢复---惜分飞
数据库·oracle
cspttty34 分钟前
2026秋招供应链分析师技能栈:SQL、Excel、BI与业务分析
数据库·sql·excel
无巧不成书021843 分钟前
Tomcat 下载后使用全指南:解压、环境配置、启动验证与常见问题排查
java·tomcat
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之多因子认证缓存服务
java·spring·缓存
Omics Pro1 小时前
澳科大:自进化AI虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
ShineWinsu1 小时前
对于MySQL:索引的解析
linux·数据库·mysql·面试·笔试·索引·海量数据