Java面试题更新 2026-08-03

请说明 MyBatis 动态 SQL 的作用、其执行原理,以及常见的动态 SQL 元素有哪些?

考察说明

考察对 MyBatis 动态 SQL 功能、实现机制和常用标签的掌握程度。

回答思路

  1. 【回答框架 1】动态 SQL 是 MyBatis 的核心特性,用于根据条件动态生成 SQL 语句,避免拼接 SQL 的繁琐和易错,提高可维护性。
  2. 【回答框架 2】执行原理基于 OGNL 表达式和 XML 或注解中的标签,MyBatis 解析 XML 时,会将动态 SQL 解析为 SqlSource,运行时根据参数计算表达式,动态拼接 SQL,最终通过 JDBC 执行。
  3. 【回答框架 3】常见动态 SQL 标签包括 if、choose/when/otherwise、trim/where/set、foreach、bind 等,分别用于条件判断、分支选择、智能添加关键字和遍历集合。
  4. 【关键点 1】动态 SQL 避免了手动拼接 SQL 带来的语法错误和 SQL 注入风险。
  5. 【关键点 2】其原理是 MyBatis 通过 OGNL 表达式动态计算 SQL 片段。
  6. 【关键点 3】常用标签包括 if、where、set、foreach、choose、bind。
  7. 【关键点 4】动态 SQL 在解析时会将片段组合成完整的 SQL 语句。
  8. 【易错点 1】foreach 标签使用时需注意 collection 参数的正确性和空集合处理。
  9. 【易错点 2】where 标签可能在某些条件下无法正确去除多余的 AND 或 OR,需要仔细设计。
  10. 【易错点 3】动态 SQL 拼接可能导致 SQL 缓存失效,需要关注性能。