MyBatis XPathParser的简单使用实践

 

MyBatis 是优秀的开源数据库框架,本菜鸟抱着学习的态度,通过《MyBatis技术内幕》一书来进行MyBatis 的学习。

MyBatis 的基础支撑层使用XPathParser来实现XML的解析,纸上得来终觉浅,本菜鸟决定亲自简单实践下XPathParser的使用,并在此做下备忘;

首先,XPathParser封装了XML的document对象,其构造方法较多,个人选了以下几个方法:

第一个是将XML内容作为一个字符串输入

  public XPathParser(String xml) {
    commonConstructor(false, null, null);
    this.document = createDocument(new InputSource(new StringReader(xml)));
  }

接下来是添加一个是否进行校验的标志位

  public XPathParser(String xml, boolean validation) {
    commonConstructor(validation, null, null);
    this.document = createDocument(new InputSource(new StringReader(xml)));
  }

再接下来,是添加一个Properties 来作为配置值方便解析(后面写测试方法,采用此构造方法)

  public XPathParser(String xml, boolean validation, Properties variables) {
    commonConstructor(validation, variables, null);
    this.document = createDocument(new InputSource(new StringReader(xml)));
  }

我们先准备一份XML文件,是从网上抄来的,如下所示:




    
    
    
    
        
    
    
    
        
    
    
    
        
            
            
                
                
                
                
                
            
        
    
    
    
        
    

我们构造一个Properties对象,作为构造方法的入参:

Properties properties = new Properties();
properties.put("jdbc.driverClass", "jdbc.driverClass");
properties.put("jdbc.url","hahaha");

构造方法如下(对付看吧) 

XPathParser xPathParser = new XPathParser("\n" +
                "\n" +
                "\n" +
                "    \n" +
                "    \n" +
                "    \n" +
                "    \n" +
                "        \n" +
                "    \n" +
                "    \n" +
                "    \n" +
                "        \n" +
                "    \n" +
                "    \n" +
                "    \n" +
                "        \n" +
                "            \n" +
                "            \n" +
                "                \n" +
                "                \n" +
                "                \n" +
                "                \n" +
                "                \n" +
                "            \n" +
                "        \n" +
                "    \n" +
                "    \n" +
                "    \n" +
                "        \n" +
                "    \n" +
                "", false, properties);

接下来,我们需要针对准备的xml文件,来设计XPath表达式,XPath表达式可以在W3School学习(网址:https://www.w3school.com.cn/xpath/xpath_syntax.asp);

        String string1 = xPathParser.evalString("//typeAliases/package/@name"); //typeAliases下package标签的name值
        String string2 = xPathParser.evalString("//environments/environment/dataSource/@type"); //environments下environment下dataSource标签的type值
        List xNodes = xPathParser.evalNodes("//dataSource/property/@value"); //dataSource下property下的所有value值

前两个输出在此不做描述,我们遍历xNodes ,可以得到Body的值为:

jdbc.driverClass
hahaha
${jdbc.username}
${jdbc.password}

我们可以发现,jdbc.driverClass,hahaha,都是我们在入参的Properties中配置的值,因此可以通过${},来取出value,而对于Properties对象中不存在的值,XPathParser只能取对应的字符串作为value(${jdbc.password}等)。

希望通过学习优秀开源框架的工具,可以在以后自身工作的开发中学以致用,更好滴解决实际问题,以后本菜会多多实践优秀框架为我们创造的工具,丰富自己的武器库。

你可能感兴趣的:(数据库)