91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis源碼分析[02.XMLConfigBuilder]

發布時間:2020-06-22 06:06:06 來源:網絡 閱讀:914 作者:IMUKL8 欄目:軟件技術
// BaseBuilder屬性

public abstract class BaseBuilder {
  //需要配置,類型別名注冊,類型處理器注冊3個東西
  protected final Configuration configuration;
  protected final TypeAliasRegistry typeAliasRegistry;
  protected final TypeHandlerRegistry typeHandlerRegistry;
}

public class XMLConfigBuilder extends BaseBuilder{},可見XMLConfigBuilder繼承自BaseBuilder

// XMLConfigBuilder屬性
public class XMLConfigBuilder extends BaseBuilder {

  //是否已解析
  private boolean parsed;
  // XPath解析器
  private XPathParser parser;

  // 當前環境
  private String environment;
}

SqlSessionFactoryBuilder調用XMLConfigBuilder的parse()函數

//  <?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> 
//  <environments default="development"> 
//  <environment id="development"> 
//  <transactionManager type="JDBC"/> 
//  <dataSource type="POOLED"> 
//  <property name="driver" value="${driver}"/> 
//  <property name="url" value="${url}"/> 
//  <property name="username" value="${username}"/> 
//  <property name="password" value="${password}"/> 
//  </dataSource> 
//  </environment> 
//  </environments>
//  <mappers> 
//  <mapper resource="org/mybatis/example/BlogMapper.xml"/> 
//  </mappers> 
//  </configuration>

  //解析配置
  public Configuration parse() {
    //如果已經解析過了,報錯
    if (parsed) {
      throw new BuilderException("Each XMLConfigBuilder can only be used once.");
    }
    parsed = true;

    //根節點是configuration
    parseConfiguration(parser.evalNode("/configuration"));
    return configuration;
  }

通過源碼可以看到parse()函數實際上是調用的parseConfiguration()函數,內部實現如下:

private void parseConfiguration(XNode root) {
  try {
    //分步驟解析
    //issue #117 read properties first
    //1.properties
    propertiesElement(root.evalNode("properties"));
    //2.類型別名
    typeAliasesElement(root.evalNode("typeAliases"));
    //3.插件
    pluginElement(root.evalNode("plugins"));
    //4.對象工廠
    objectFactoryElement(root.evalNode("objectFactory"));
    //5.對象包裝工廠
    objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
    //6.設置
    settingsElement(root.evalNode("settings"));
    // read it after objectFactory and objectWrapperFactory issue #631
    //7.環境
    environmentsElement(root.evalNode("environments"));
    //8.databaseIdProvider
    databaseIdProviderElement(root.evalNode("databaseIdProvider"));
    //9.類型處理器
    typeHandlerElement(root.evalNode("typeHandlers"));
    //10.映射器
    mapperElement(root.evalNode("mappers"));
  } catch (Exception e) {
    throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
  }
}

以上函數為mybatis對于配置文件的關鍵節點進行解析處理.

  • propertiesElement(XNode context)
//<properties resource="org/mybatis/example/config.properties">
//    <property name="username" value="dev_user"/>
//    <property name="password" value="F2Fa3!33TYyg"/>
//</properties>
  • typeAliasesElement(XNode context)
//<typeAliases>
//  <typeAlias alias="Author" type="domain.blog.Author"/>
//  <typeAlias alias="Blog" type="domain.blog.Blog"/>
//  <typeAlias alias="Comment" type="domain.blog.Comment"/>
//  <typeAlias alias="Post" type="domain.blog.Post"/>
//  <typeAlias alias="Section" type="domain.blog.Section"/>
//  <typeAlias alias="Tag" type="domain.blog.Tag"/>
//</typeAliases>
  • pluginElement(XNode context)
  //MyBatis 允許你在某一點攔截已映射語句執行的調用。默認情況下,MyBatis 允許使用插件來攔截方法調用
//<plugins>
//  <plugin interceptor="org.mybatis.example.ExamplePlugin">
//    <property name="someProperty" value="100"/>
//  </plugin>
//</plugins>  
  • objectFactoryElement(XNode context)
//<objectFactory type="org.mybatis.example.ExampleObjectFactory">
//  <property name="someProperty" value="100"/>
//</objectFactory>
  • objectWrapperFactoryElement(XNode context)
  • settingsElement(XNode context)
//<settings>
//  <setting name="cacheEnabled" value="true"/>
//  <setting name="lazyLoadingEnabled" value="true"/>
//  <setting name="multipleResultSetsEnabled" value="true"/>
//  <setting name="useColumnLabel" value="true"/>
//  <setting name="useGeneratedKeys" value="false"/>
//  <setting name="enhancementEnabled" value="false"/>
//  <setting name="defaultExecutorType" value="SIMPLE"/>
//  <setting name="defaultStatementTimeout" value="25000"/>
//  <setting name="safeRowBoundsEnabled" value="false"/>
//  <setting name="mapUnderscoreToCamelCase" value="false"/>
//  <setting name="localCacheScope" value="SESSION"/>
//  <setting name="jdbcTypeForNull" value="OTHER"/>
//  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
//</settings>
  • environmentsElement(XNode context)
//  <environments default="development">
//    <environment id="development">
//      <transactionManager type="JDBC">
//        <property name="..." value="..."/>
//      </transactionManager>
//      <dataSource type="POOLED">
//        <property name="driver" value="${driver}"/>
//        <property name="url" value="${url}"/>
//        <property name="username" value="${username}"/>
//        <property name="password" value="${password}"/>
//      </dataSource>
//    </environment>
//  </environments>
  • databaseIdProviderElement(XNode context)
//  <databaseIdProvider type="VENDOR">
//    <property name="SQL Server" value="sqlserver"/>
//    <property name="DB2" value="db2"/>        
//    <property name="Oracle" value="oracle" />
//  </databaseIdProvider>
  • typeHandlerElement(XNode context)
//  <typeHandlers>
//    <typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
//  </typeHandlers>
  • mapperElement(XNode context)
//  1.使用類路徑
//  <mappers>
//    <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
//    <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
//    <mapper resource="org/mybatis/builder/PostMapper.xml"/>
//  </mappers>
//
//  2.使用絕對url路徑
//  <mappers>
//    <mapper url="file:///var/mappers/AuthorMapper.xml"/>
//    <mapper url="file:///var/mappers/BlogMapper.xml"/>
//    <mapper url="file:///var/mappers/PostMapper.xml"/>
//  </mappers>
//
//  3.使用java類名
//  <mappers>
//    <mapper class="org.mybatis.builder.AuthorMapper"/>
//    <mapper class="org.mybatis.builder.BlogMapper"/>
//    <mapper class="org.mybatis.builder.PostMapper"/>
//  </mappers>
//
//  4.自動掃描包下所有映射器
//  <mappers>
//    <package name="org.mybatis.builder"/>
//  </mappers>
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

土默特左旗| 开原市| 大关县| 阜康市| 邯郸县| 杨浦区| 石景山区| 台湾省| 若尔盖县| 大余县| 永年县| 西华县| 句容市| 南溪县| 昔阳县| 罗平县| 讷河市| 浦北县| 于田县| 图片| 颍上县| 集安市| 三门县| 璧山县| 南充市| 越西县| 建水县| 鲁甸县| 揭西县| 香格里拉县| 安岳县| 无为县| 柏乡县| 子洲县| 修武县| 南京市| 吉木乃县| 岑巩县| 泰州市| 玛沁县| 安阳市|