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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java zookeeper服务的使用详解

    Java zookeeper服务的使用详解

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等
    2022-08-08
  • 字符串desede 3des加密示例分享

    字符串desede 3des加密示例分享

    这篇文章主要介绍了字符串desede 3des加密示例,大家参考使用吧
    2014-01-01
  • Java监听器的作用及用法代码示例

    Java监听器的作用及用法代码示例

    这篇文章主要介绍了Java监听器的作用及用法代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java AtomicInteger类的使用方法详解

    Java AtomicInteger类的使用方法详解

    这篇文章主要介绍了Java AtomicInteger类的使用方法详解,文中有具体实例代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • springboot连接redis并动态切换database的实现方法

    springboot连接redis并动态切换database的实现方法

    这篇文章主要介绍了springboot连接redis并动态切换database,本文主为通过修改ConnectionFactory从而达到动态切换database的效果,结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 一文带你深入了解Guava的缓存机制

    一文带你深入了解Guava的缓存机制

    缓存在现代编程中的作用非常大,它能提高应用性能,减少数据库压力,简直就是性能优化的利器,本文主要来和大家聊聊Google Guava的缓存机制,感兴趣的小伙伴可以了解下
    2023-12-12
  • 利用Springboot+Caffeine实现本地缓存实例代码

    利用Springboot+Caffeine实现本地缓存实例代码

    Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库,下面这篇文章主要给大家介绍了关于利用Springboot+Caffeine实现本地缓存的相关资料,需要的朋友可以参考下
    2023-01-01
  • SpringBoot之自定义Schema扩展方式

    SpringBoot之自定义Schema扩展方式

    这篇文章主要介绍了SpringBoot之自定义Schema扩展方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java实现动态验证码

    java实现动态验证码

    这篇文章主要为大家详细介绍了java实现动态验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Spring boot中PropertySource注解的使用方法详解

    Spring boot中PropertySource注解的使用方法详解

    这篇文章主要给大家介绍了关于Spring boot中PropertySource注解的使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-12-12

最新评论