Mybatis源码-动态SQL的实现原理

前言

Mybatis提供了强大的动态SQL语句生成功能,以应对复杂的业务场景,本篇文章将结合Mybatis解析SQL语句的过程对Mybatis中对等动态SQL标签的支持进行分析。

正文

一. XML文档中的节点概念

在分析Mybatis如何支持SQL语句之前,本小节先分析XML文档中的节点概念。XML文档中的每个成分都是一个节点,DOMXML节点的规定如下所示。

  • 整个文档是一个文档节点
  • 每个XML标签是一个元素节点
  • 包含在元素节点中的文本是文本节点

以一个XML文档进行说明,如下所示。


    
        成都
    
    
        武汉
    

如上所示,整个XML文档是一个文档节点,这个文档节点有一个子节点,就是元素节点,元素节点有五个子节点,分别是:文本节点,元素节点,文本节点,元素节点和文本节点,注意,在元素节点的子节点中的文本节点的文本值均是\n,表示换行符。同样,元素节点有三个子节点,分别是:文本节点,元素节点和文本节点,这里的文本节点的文本值也是\n,然后元素节点只有一个子节点,为一个文本节点。节点的子节点之间互为兄弟节点,例如元素的五个子节点之间互为兄弟节点,name为“四川”的元素节点的上一个兄弟节点为文本节点,下一个兄弟节点也为文本节点。

二. Mybatis支持动态SQL源码分析

Mybatis源码-加载映射文件与动态代理中已经知道,在XMLStatementBuilderparseStatementNode()方法中,会解析映射文件中的