MyBatis--解析器模块

MyBatis--解析器模块解析器模块概述XPathParser构造方法解析器模块概述解析器模块 对应着 parsing 包解析器模块,主要提供了两个功能对XPath进行封装,为MyBatis初始化时解析mybatis - config.xml 配置文件以及映射配置文件提供支持对了处理动态 sql 语句中的占位符提供支持XPathParser基于 Java XPath 解析器,用于解析 MyBatis mybatis-config.xml 和 **Mapper.xml 等 XML 配置文
摘要由CSDN通过智能技术生成

解析器模块概述

解析器模块 对应着 parsing 包
在这里插入图片描述
解析器模块,主要提供了两个功能

  1. 对XPath进行封装,为MyBatis初始化时解析mybatis - config.xml 配置文件以及映射配置文件提供支持
  2. 对了处理动态 sql 语句中的占位符提供支持

XPathParser

基于 Java XPath 解析器,用于解析 MyBatis mybatis-config.xml 和 **Mapper.xml 等 XML 配置文件

//XPathParser.java
  // XML Document 对象
  private final Document document;
  // 是否检验
  private boolean validation;
  // XML 实体解析器
  private EntityResolver entityResolver;
  // 变量 Properties 对象
  private Properties variables;
  // 变量 XPaht对象
  private XPath xpath;
  1. document:XML 被解析后,生成的 org.w3c.dom.Document 对象
  2. validation:是否校验 XML 一般为true
  3. entityResolver :XML 实体解析器。默认情况下,对 XML 进行校验时,会基于 XML 文档开始位置指定的 DTD 文件或 XSD 文件
  4. variables :变量 Properties 对象,用来替换需要动态配置的属性值
<dataSource type="POOLED">
  <property name="driver" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</dataSource>

variables 的来源,即可以在常用的 Java Properties 文件中配置,也可以使用 MyBatis的 < property /> 标签中配置

<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</properties>
  1. xpath : 用于查询 XML 中的节点和元素

构造方法

XPathParser 有16个构造方法

// XPathParser.java
  /*
  @param xml 文件地址
  @param validation  是否检验XML
  @param variables  变量 Properties 对象
  @param entityResolver  XML 实体解析器
   */
  public XPathParser(String xml, boolean validation, Properties variables, EntityResolver entityResolver) {
   
     // 公用的构造方法
    commonConstructor(validation, variables, entityResolver);
    // 将 XML 文件解析成 Document 对象
    this.document = createDocument(new InputSource(new StringReader(xml)));
  }

  private void commonConstructor(boolean validation, Properties variables, EntityResolver entityResolver) {
   
    this.validation = validation;
    this.entityResolver = entityResolver;
    this.variables = variables;
    // 创建 XPathFactory 对象
    XPathFactory factory = XPathFactory.newInstance();
    this.xpath = factory.newXPath();
  }
  
  private Document createDocument(InputSource inputSource) {
   
    // important: this must only be called AFTER common constructor
    // 只能在公共构造函数之后调用
    try {
   
      // 创建 DocumentBuilderFactory 对象
      // 用于创建DOM模式的解析器对象DocumentBuilderFactory是一个抽象工厂类,它提供了一个newInstance方法
      // 这个方法会根据本地平台默认安装的解析器,自动创建一个工厂的对象并返回
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
      // 设置是否验证 XML
      factory.setValidating(validation);

      factory.setNamespaceAware(false);
      factory.setIgnoringComments(true);
      factory.setIgnoringElementContentWhitespace(false);
      factory.setCoalescing(false);
      factory.setExpandEntityReferences(true);

      // 创建 DocumentBuilder 对象
      DocumentBuilder builder = factory.newDocumentBuilder();
      builder.setEntityResolver(entityResolver); // 设置实体解析器
      builder.setErrorHandler(new ErrorHandler() {
   
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值