Skip to content

Mybatis Plus 条件构造器 Wrapper

TIP

Wrapper 是 MyBatis-Plus 的核心查询工具,支持 Lambda 表达式和链式调用,避免了拼写字段名的硬编码。

QueryWrapper(普通查询)

java
// 基本条件
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三")
       .ge("age", 18)
       .like("email", "@qq.com")
       .orderByDesc("create_time");
List<User> users = userMapper.selectList(wrapper);

// 多条件组合
wrapper.and(w -> w.eq("name", "张三").or().eq("name", "李四"));

// 子查询
wrapper.inSql("id", "SELECT user_id FROM `order` WHERE amount > 1000");

LambdaQueryWrapper(类型安全)

java
// 使用 Lambda 表达式,字段名通过方法引用获取
LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery();
wrapper.eq(User::getName, "张三")
       .ge(User::getAge, 18)
       .like(User::getEmail, "@qq.com")
       .orderByDesc(User::getCreateTime);

// 简化写法
List<User> users = userMapper.selectList(
    Wrappers.<User>lambdaQuery()
        .eq(User::getName, "张三")
        .select(User::getId, User::getName)
);

UpdateWrapper(更新条件)

java
// 条件更新
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("name", "张三")
       .set("age", 30)
       .set("email", "new@example.com");
userMapper.update(null, wrapper);

// Lambda 方式
userMapper.update(null,
    Wrappers.<User>lambdaUpdate()
        .eq(User::getName, "张三")
        .set(User::getAge, 30)
);

常用条件方法

方法说明
eq / ne等于 / 不等于
gt / ge大于 / 大于等于
lt / le小于 / 小于等于
between / notBetween在之间 / 不在之间
like / notLike模糊查询
likeLeft / likeRight左 / 右模糊
isNull / isNotNull为 null / 不为 null
in / notIn包含 / 不包含
groupBy分组
orderByAsc / orderByDesc排序
having分组筛选
apply拼接原生 SQL