码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis解析模块

时间:2020-03-02 23:13:43      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:public   throw   mes   ima   文件   row   mybatis源码   const   ant   

mybatis读取配置文件时都是通过xml来解析对应的配置。这里mybatis内部使用的是sax的解析方式,采用xpath的方式来查询xml中的数据。

xpath解析方式

关于xpath的解析方式这里自己手动来测试一个xml文件,对应的使用方法在mybatis源码中也有对应的实现

 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

        //开启验证
        documentBuilderFactory.setValidating(true);
        documentBuilderFactory.setNamespaceAware(false);
        documentBuilderFactory.setIgnoringComments(true);
        documentBuilderFactory.setIgnoringElementContentWhitespace(false);
        documentBuilderFactory.setCoalescing(false);
        documentBuilderFactory.setExpandEntityReferences(true);


        //创建DocumentBuilder
        DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();

        //设置异常处理对象
        builder.setErrorHandler(new ErrorHandler() {
            @Override
            public void error(SAXParseException exception) throws SAXException {
                throw exception;
            }

            @Override
            public void fatalError(SAXParseException exception) throws SAXException {
                throw exception;
            }

            @Override
            public void warning(SAXParseException exception) throws SAXException {
            }
        });

        //将文档加载到Document对象中
        Document doc = builder.parse("src/main/resources/mybatis-config.xml");
        XPathFactory xPathFactory = XPathFactory.newInstance();
        XPath xpath = xPathFactory.newXPath();

        NodeList result = (NodeList)xpath.evaluate("//property",doc, XPathConstants.NODESET);
        System.out.println(result.item(1).getAttributes().getNamedItem("value"));

这是一个main方法中的代码片段,主要作用是读取mybatis-config.xml中的对应的数据库地址

<property name="url" value="jdbc:mysql://119.23.25.22:3306/fzan?characterEncoding=UTF-8"/>

mybatis中的解析模块

技术图片

这些类后面会说到。

先来看下XPathParser类,改类中的各个字段如下

  private final Document document; //Document 对象

  private boolean validation; //是否开启验证
  private EntityResolver entityResolver;  //用于加载本地DTD文件
  private Properties variables;//mybatis-config.xml中<propteries>边间键值对集合
  private XPath xpath;//xpath对象

document是xml解析后原始的一个Document对象,所以是一个final类型的。
然后是validation是一个bool类型的属性表示是否开启验证,默认情况下mybatis读取xml会联网加载dtd文件来校验mybatis的配置文件是否正确。但也不排除没有网络的情况,这样可以通过entityResolver来加载mybatis包中的离线dtd文档来校验。
EntityResolver是一个接口,其中XMLMApperEntityResolver就继承自该接口

mybatis解析模块

标签:public   throw   mes   ima   文件   row   mybatis源码   const   ant   

原文地址:https://www.cnblogs.com/rw4y/p/12398236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!