简单学习一下 MyBatis 动态SQL使用及原理( 三 )

  • SqlSessionFactoryBuilder 类:用于创建 SqlSessionFactory 对象,它会将所有的 Builder 对象组合在一起,完成 SQL 语句的解析和构造 。

  • 简单学习一下 MyBatis 动态SQL使用及原理

    文章插图
     
    通过上述不同类型的 Builder 对象,我们可以将 XML 中的 SQL 片段转换成 Java 对象,并且根据各种条件生成相应的 SQL 语句 。这个过程中涉及到的类和方法非常多,需要我们深入地了解 MyBatis 的内部实现才能灵活运用 。
    九、总结本文通过介绍MyBatis动态SQL的基本概念和常用标签(if、choose、when、otherwise、trim、where、set、foreach),希望读者能够更加深入地了解MyBatis的使用和原理 。在实际开发过程中,要根据具体场景和需求选择合适的动态SQL标签,从而实现灵活拼接SQL语句的功能,提高开发效率 。
    在 MyBatis 中,动态 SQL 主要包括以下几种类型:
    1. <if> 标签:表示一个条件语句,可以根据条件判断是否包含相应的 SQL 片段 。
    2. <where> 标签:表示一个 WHERE 条件语句,可以根据配置自动添加 WHERE 关键字 。
    3. <choose> 标签:表示一个选择语句,可以根据多个条件选择符合条件的 SQL 片段 。
    4. <foreach> 标签:表示一个循环语句,在循环中动态生成 SQL 语句 。
    5. <set> 标签:表示一个 SET 子句,可以根据指定的属性值动态生成 SET 语句 。
    以上标签都属于动态 SQL,在解析时需要通过特殊的方式进行处理 。下面以 <if> 标签为例介绍解析原理:
    1. XMLScriptBuilder 类会根据标签类型创建相应的 SQL 节点,例如 <if> 标签对应的节点是 IfSqlNode 对象 。
    2. XMLScriptBuilder 类会递归解析节点内部的子节点,并将其组合成一个 SQL 片段 。
    3. 当解析到 IfSqlNode 节点时,XMLScriptBuilder 类会获取标签中的 test 属性,并根据该属性值创建一个 OgnlExpression 对象(OGNL 表达式对象),用于判断条件是否满足 。
    4. 如果条件满足,则将子节点生成的 SQL 片段添加到当前 SQL 上下文中;否则忽略该节点 。
    5. 最终生成的 SQL 语句就是将所有满足条件的 SQL 片段组合起来得到的 。
    以上就是 MyBatis 实现动态 SQL 解析的大体流程 。通过 XMLScriptBuilder 类的递归解析,可以将各种类型的动态 SQL 节点转换成 SqlNode 接口的实现,然后通过 MixedSqlNode 类将它们组合成一个完整的 SQL 片段 。
    作者:Cosolar
    链接:
    https://juejin.cn/post/7231921877466677285
    来源:稀土掘金




    推荐阅读