首頁 > 軟體

MyBatis XPathParser解析器使用範例詳解

2022-07-15 14:05:57

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檔案,是從網上抄來的,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 引入外部資原始檔 -->
    <properties resource="jdbc.properties"></properties>
    <!-- 設定駝峰匹配 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!-- 設定包掃描(別名) -->
    <typeAliases>
        <package name="cn.itcast.pojo"/>
    </typeAliases>
    <!-- 設定環境:可以設定多個環境,default:設定某一個環境的唯一標識,表示預設使用哪個環境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 設定連線資訊 -->
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 設定對映檔案:用來設定sql語句和結果集型別等 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

我們構造一個Properties物件,作為構造方法的入參:

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

構造方法如下(對付看吧)

XPathParser xPathParser = new XPathParser("<?xml version="1.0" encoding="utf-8"?>n" +
                "<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"n" +
                "        "http://mybatis.org/dtd/mybatis-3-config.dtd">n" +
                "<configuration>n" +
                "    <!-- 引入外部資原始檔 -->n" +
                "    <properties resource="jdbc.properties"></properties>n" +
                "    <!-- 設定駝峰匹配 -->n" +
                "    <settings>n" +
                "        <setting name="mapUnderscoreToCamelCase" value="true"/>n" +
                "    </settings>n" +
                "    <!-- 設定包掃描(別名) -->n" +
                "    <typeAliases>n" +
                "        <package name="cn.itcast.pojo"/>n" +
                "    </typeAliases>n" +
                "    <!-- 設定環境:可以設定多個環境,default:設定某一個環境的唯一標識,表示預設使用哪個環境 -->n" +
                "    <environments default="development">n" +
                "        <environment id="development">n" +
                "            <transactionManager type="JDBC"/>n" +
                "            <dataSource type="POOLED">n" +
                "                <!-- 設定連線資訊 -->n" +
                "                <property name="driver" value="${jdbc.driverClass}"/>n" +
                "                <property name="url" value="${jdbc.url}"/>n" +
                "                <property name="username" value="${jdbc.username}"/>n" +
                "                <property name="password" value="${jdbc.password}"/>n" +
                "            </dataSource>n" +
                "        </environment>n" +
                "    </environments>n" +
                "    <!-- 設定對映檔案:用來設定sql語句和結果集型別等 -->n" +
                "    <mappers>n" +
                "        <mapper resource="UserMapper.xml"/>n" +
                "    </mappers>n" +
                "</configuration>", false, properties);

接下來,我們需要針對準備的xml檔案,來設計XPath表示式,XPath表示式可以在此處學習

        String string1 = xPathParser.evalString("//typeAliases/package/@name"); //typeAliases下package標籤的name值
        String string2 = xPathParser.evalString("//environments/environment/dataSource/@type"); //environments下environment下dataSource標籤的type值
        List<XNode> 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}等)。

希望通過學習優秀開源框架的工具,可以在以後自身工作的開發中學以致用,更好滴解決實際問題,以後本菜會多多實踐優秀框架為我們創造的工具,豐富自己的武器庫。

到此這篇關於MyBatis XPathParser解析器使用範例詳解的文章就介紹到這了,更多相關MyBatis XPathParser內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com