Mybatis源码学习之路二解析器模块

一 前言

  1. Mybatis在初始化过程中处理mybatis-config.xml核心配置文件时,使用的是DOM解析方式,并结合使用XPath解析XML配置文件
  2. Mybatis对XML解析功能进行了封装,由解析器模块提供支持,其中核心类为XPathParser,它封装了XPath、Document以及EntityResolver等

二 基础知识

  1. XML解析常见的三种方式:
    1. DOM(Document Object Model)解析方式
    2. SAX(Simple API for XML)解析方式
    3. StAX(Streaming API for XML)解析方式
  2. DOM:
    1. 基于树形结构的解析方式,将整个XML文档读入到内存并构建一个DOM树,基于这颗树形结构对各个节点Node进行操作
    2. 优点:
      1. 易于编程,可以在根据需求在各个节点之间进行导航
    3. 缺点:
      1. 将整个XML加载到内存中并构建树形结构,对于比较大的XML文档,消耗很大
  3. SAX:
    1. SAX基于事件模型进行解析,它每次只是加载一部分文档到内存,即可开始解析。
    2. 当SAX解析器解析到某类型节点时,会触发注册在该节点上的回调函数,开发人员可以注册相应的回调函数进行操作,一般情况下继承SAX提供的DefaultHandler基类,重写相应的事件处理器并进行注册即可
    3. 优点:
      1. 不会将整个XML文档加载到内存,资源消耗较少
      2. 当程序处理过程满足条件时可以即刻停止,不必解析剩余的XML文档
    4. 缺点:
      1. 基于事件驱动进行解析,不会将整个XML文档加载到内存,需要开发人员自己维护业务逻辑涉及的各个节点
  4. StAX:
    1. 它可以很好的支持DOM和SAX解析方式,和SAX解析方式类似,但是不同之处在于StAX采用的是"拉模式",即应用程序通过调用解析器推进解析的过程
    2. StAX提供了两套API:
      1. 基于指针的API,一种底层的API,优势是效率高,缺点是抽象度低不易使用
      2. 基于迭代器的API,允许应用程序将XML文档作为一系列的事件对象来处理,缺点是效率低,但是易于使用
  5. XPath简介
    1. XPath是一种为查询XML文档而设计的语言,可以和DOM解析方式配合使用,实现对XML文档的解析。它使用路径表达式来选取XML文档中指定的节点或者节点集合
    2. XPath表达式的查找结果类型有五种,在XPathConstants类中提供:
      1. nodeset、boolean、number、string和Node

三 核心接口解析

  1. 相关类:XPathParser、XNode、PropertyParser、GenericTokenParser
    1. XNode对象由XPathParser创建,并且每个XNode都持有其对应XPathParser的引用
  2. 相关接口及其实现类:EntityResolver及其实现类XMLMapperEntityResolver,TokenHandler及其实现类VariableTokenHandler
  3. XPathParser类
    1. 各个字段的含义和功能
    2. //Document对象
      private final Document document;
      //是否开启验证
      private boolean validation;
      //用于加载本地dtd文件
      private EntityResolver entityResolver;
      //核心配置文件中标签中定义的键值对
      private Properties variables;
      //XPath对象,用于查找节点
      private XPath xpath;

       

    3. createDocument()方法用于根据文件流

你可能感兴趣的:(mybatis,mybatis,mybatis配置文件解析,mybatis解析器模块)