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