MyBatis-Plus 条件构造器Wrapper使用示例详解(最新整理)

 更新时间:2025年06月11日 11:19:23   作者:愿你天黑有灯下雨有伞  
条件构造器是 MyBatis-Plus 框架中用于动态构建 SQL 条件的核心工具类,通过链式编程方式实现复杂查询条件的组合,本文给大家介绍MyBatis-Plus条件构造器Wrapper使用示例,感兴趣的朋友一起看看吧

一、条件构造器概述

条件构造器(Wrapper)是 MyBatis-Plus 框架中用于动态构建 SQL 条件的核心工具类,通过链式编程方式实现复杂查询条件的组合。其主要作用包括:

  • 替代传统 XML 中的动态 SQL 标签
  • 提供类型安全的条件构建方式
  • 支持 Lambda 表达式语法
  • 实现复杂的 AND/OR 条件组合

注意:MyBatis-Plus 3.x+ 版本已弃用 EntityWrapper,推荐使用 QueryWrapperLambdaQueryWrapper

二、核心 Wrapper 类型

类型说明版本要求
QueryWrapper<T>通用条件构造器3.0+
UpdateWrapper<T>更新操作条件构造器3.0+
LambdaQueryWrapper<T>Lambda 语法条件构造器3.0.5+

三、基础使用示例

  1. 简单条件构建

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 25)
       .like("name", "张")
       .between("create_time", startDate, endDate)
       .orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);

2. Lambda 表达式构建

LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(User::getAge, 25)
             .like(User::getName, "张")
             .between(User::getCreateTime, startDate, endDate)
             .orderByDesc(User::getId);
List<User> users = userMapper.selectList(lambdaWrapper);

3. 嵌套条件构建

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.and(w -> w.eq("age", 25).or().like("name", "张"))
       .between("create_time", startDate, endDate)
       .orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);

4. 更新操作条件构建

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1)
             .set("name", "新名字")
             .set("age", 30);
int result = userMapper.update(null, updateWrapper);

四、常用方法说明

条件构建方法

方法名说明示例
eq等于eq("age", 25)
ne不等于ne("age", 25)
gt大于gt("age", 25)
ge大于等于ge("age", 25)
lt小于lt("age", 25)
le小于等于le("age", 25)
like模糊查询like("name", "张")
notLike非模糊查询notLike("name", "张")
between范围查询between("age", 20, 30)
notBetween非范围查询notBetween("age", 20, 30)
inIN 查询in("age", Arrays.asList(20, 25, 30))
notInNOT IN 查询notIn("age", Arrays.asList(20, 25, 30))
isNullIS NULL 查询isNull("age")
isNotNullIS NOT NULL 查询isNotNull("age")

排序方法

方法名说明示例
orderByAsc升序排序orderByAsc("id")
orderByDesc降序排序orderByDesc("id")

嵌套条件方法

方法名说明示例
andAND 嵌套条件and(w -> w.eq("age", 25).or().like("name", "张"))
orOR 嵌套条件or(w -> w.eq("age", 25).or().like("name", "张"))

五、LambdaQueryWrapper 优势

LambdaQueryWrapper 使用 Lambda 表达式,具有以下优势:

  • 类型安全:避免字段名拼写错误
  • 代码可读性高:直接使用实体类字段
  • IDE 自动补全:方便快速构建条件

六、注意事项

  • 空值处理:条件构造器会自动忽略 null
  • SQL 注入:避免直接拼接用户输入,使用参数绑定防止 SQL 注入
  • 性能优化:复杂条件查询时,合理使用索引

七、更多示例 QueryWrapper

示例 1. 简单查询

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 25)
       .like("name", "张")
       .between("create_time", startDate, endDate)
       .orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);

2. 复杂查询

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.and(w -> w.eq("age", 25).or().like("name", "张"))
       .and(w -> w.between("create_time", startDate, endDate))
       .orderByDesc("id");
List<User> users = userMapper.selectList(wrapper);

3. 删除操作

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNull("email");
int result = userMapper.delete(wrapper);

4. 更新操作

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("id", 1);
User user = new User();
user.setName("新名字");
user.setAge(30);
int result = userMapper.update(user, wrapper);

LambdaQueryWrapper

示例 1. 简单查询

LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.eq(User::getAge, 25)
             .like(User::getName, "张")
             .between(User::getCreateTime, startDate, endDate)
             .orderByDesc(User::getId);
List<User> users = userMapper.selectList(lambdaWrapper);

2. 复杂查询

LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.and(w -> w.eq(User::getAge, 25).or().like(User::getName, "张"))
             .and(w -> w.between(User::getCreateTime, startDate, endDate))
             .orderByDesc(User::getId);
List<User> users = userMapper.selectList(lambdaWrapper);

UpdateWrapper 示例

1. 简单更新

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", 1)
             .set("name", "新名字")
             .set("age", 30);
int result = userMapper.update(null, updateWrapper);

2. 复杂更新

UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.like("name", "a")
             .and(w -> w.gt("age", 20).or().isNull("email"))
             .set("name", "小黑")
             .set("email", "dhsjfghr");
int result = userMapper.update(null, updateWrapper);

到此这篇关于MyBatis-Plus 条件构造器Wrapper使用指南的文章就介绍到这了,更多相关MyBatis-Plus 条件构造器Wrapper内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis 扩展BaseTypeHandler 转换泛型 JSON 列表的解决方法

    MyBatis 扩展BaseTypeHandler 转换泛型 JSON 列表的解

    本文详细介绍了MyBatis中处理JSON转换的bug及其解决方法,文章还介绍了如何处理抽象类和自定义对象的JSON转换,并提供了一个基类AbstractListTypeHandler作为示例,最后,文章附上了MyBatis内建的javaTypeAlias链接,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • Java中stream.map和stream.forEach的区别

    Java中stream.map和stream.forEach的区别

    本文主要介绍了Java中stream.map和stream.forEach的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Maven 命令行打包 和 pom.xml的常用配置详解

    Maven 命令行打包 和 pom.xml的常用配置详解

    这篇文章主要介绍了Maven 命令行打包 和 pom.xml的常用配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 详解快速排序算法中的区间划分法及Java实现示例

    详解快速排序算法中的区间划分法及Java实现示例

    这篇文章主要介绍了详解快速排序算法中的区间划分法及Java实现示例,文中分别介绍了快排时两种区间划分的思路,需要的朋友可以参考下
    2016-04-04
  • Java21增强对Emoji表情符号处理示例详解

    Java21增强对Emoji表情符号处理示例详解

    这篇文章主要为大家介绍了Java21增强对Emoji表情符号处理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Java程序顺序结构中逻辑控制语句详解流程

    Java程序顺序结构中逻辑控制语句详解流程

    在程序开发的过程之中一共会存在有三种程序逻辑:顺序结构、分支结构、循环结构,对于之前所编写的代码大部分都是顺序结构的定义,即:所有的程序将按照定义的代码顺序依次执行
    2021-10-10
  • Java正则替换手机号代码实例

    Java正则替换手机号代码实例

    本文的主要内容是Java语言中正则表达式替换手机号的第4到第7位,实现方法十分简单,同时涉及了一些正则表达式的相关用法,需要的朋友可以参考下。
    2017-09-09
  • SpringBoot使用Redis缓存MySql的方法步骤

    SpringBoot使用Redis缓存MySql的方法步骤

    本文主要介绍了SpringBoot使用Redis缓存MySql的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 使用MybatisPlus实现sql日志打印优化

    使用MybatisPlus实现sql日志打印优化

    本文主要介绍了使用MybatisPlus实现sql日志打印优化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • Java使用EasyExcel导出Excel的全流程详解

    Java使用EasyExcel导出Excel的全流程详解

    在 Java 后端开发中,Excel 导出是非常常见的需求,涉及报表、数据分析或业务导出,本文将结合 阿里 EasyExcel 库,详细讲解 Excel 导出流程,包括工具类设计、样式、列宽策略、对象映射、输出流处理,需要的朋友可以参考下
    2025-11-11

最新评论