01-mybatis配置初始化

mybatis提供了兩種配置文案案:基於Xml或基於Api

先看下mybatis提供的配置屬性
configuration(配置)
properties(屬性)
settings(設置)
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環境配置)
environment(環境變量)
transactionManager(事務管理器)
dataSource(數據源)
databaseIdProvider(數據庫廠商標識)
mappers(映射器)

基於Xml的初始化

首先是配置文件是xml格式,所以需要有專門的parser負責轉換
核心職能由org.apache.ibatis.builder.xml.XMLConfigBuilder承擔,該類負責將xml轉換成org.apache.ibatis.session.Configuration。
Configuration中保存着全局的配置信息,包括靜態配置的和動態生成的
parse的核心流程

  private void parseConfiguration(XNode root) {
    try {
      // issue #117 read properties first
      //屬性有三個來源,具體查看 site/zh/configuration.html#properties
      propertiesElement(root.evalNode("properties"));
      Properties settings = settingsAsProperties(root.evalNode("settings"));
      // VFS resource list, 目前支持兩種實現,對JBoss作了特殊處理
      loadCustomVfs(settings);
      // 日誌
      loadCustomLogImpl(settings);
      //
      typeAliasesElement(root.evalNode("typeAliases"));
      
      pluginElement(root.evalNode("plugins"));
      objectFactoryElement(root.evalNode("objectFactory"));
      objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
      reflectorFactoryElement(root.evalNode("reflectorFactory"));
      settingsElement(settings);
      // read it after objectFactory and objectWrapperFactory issue #631
      environmentsElement(root.evalNode("environments"));
      databaseIdProviderElement(root.evalNode("databaseIdProvider"));
      // 類型處理器
      typeHandlerElement(root.evalNode("typeHandlers"));
      // mapper 採集
      mapperElement(root.evalNode("mappers"));
    } catch (Exception e) {
      throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
    }
  }

整個處理流程的目的就是爲了填充Configuration

基本Api的初始化

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
//基於Api創建配置對象,並按需配置
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章