Java面试题更新 2026-08-05

请介绍在使用 MyBatis Plus 框架时,如何通过 QueryWrapper 实现对 MySQL 数据库的灵活查询?

后端开发编码实现技术原理MySQL

考察说明

考查对 MyBatis Plus 中 QueryWrapper 的核心 API 和动态查询能力的掌握程度。

回答思路

  1. 【回答框架 1】QueryWrapper 是 MyBatis Plus 提供的条件构造器,用于以链式方式构建 SQL 查询条件,避免手写 XML 或注解 SQL,可动态拼接 WHERE 子句。其核心方法包括 eq、ne、like、between、in、isNull、orderBy 等,支持 Lambda 表达式版本 LambdaQueryWrapper 以避免硬编码字段名。
  2. 【回答框架 2】典型用法是在 Service 或 Mapper 层创建 QueryWrapper 实例,调用条件方法后传给 selectList、selectOne、selectPage 等方法。例如 wrapper.eq("name", "张三").like("email", "@qq.com")。通过判断条件是否为空,可以按需添加查询条件,实现灵活查询。
  3. 【回答框架 3】LambdaQueryWrapper 使用实体类的 Lambda 方法引用,例如 wrapper.lambda().eq(User::getName, name),编译期校验字段名,减少重构维护成本。此外,QueryWrapper 支持嵌套条件(and、or 方法)和分组(groupBy)、排序(orderByAsc/Desc)等,可直接构建复杂 SQL。
  4. 【回答框架 4】在性能方面,QueryWrapper 生成的 SQL 依赖底层数据库优化,合理的索引和避免全表扫描是关键。对于大批量查询,应配合分页插件 Page 使用,避免内存溢出。对于动态多条件查询,需注意防止 SQL 注入,MyBatis Plus 内部使用预编译机制,但当使用 apply 方法拼接字符串时应特别谨慎。
  5. 【关键点 1】QueryWrapper 是 MyBatis Plus 的条件构造器,支持链式调用和动态条件拼接。
  6. 【关键点 2】LambdaQueryWrapper 通过 Lambda 表达式避免字段硬编码,提升类型安全。
  7. 【关键点 3】常用方法 eq、like、between、in、orderBy 等可满足大多数查询需求。
  8. 【关键点 4】动态查询需结合逻辑判断按需添加条件,避免不必要的查询开销。
  9. 【关键点 5】使用 apply 方法自定义 SQL 片段时注意 SQL 注入风险。
  10. 【易错点 1】误将 QueryWrapper 用于复杂多表关联查询,导致性能瓶颈,应使用自定义 SQL。
  11. 【易错点 2】不区分 eq 和 like 的语义,导致查询结果不准确。
  12. 【易错点 3】动态条件未判空,导致生成无条件查询或空条件报错;或使用 apply 时拼接未过滤的用户输入造成注入。