1. 程式人生 > 實用技巧 >Mybatis-04-配置檔案解析

Mybatis-04-配置檔案解析

configuration核心配置檔案中包含了會深深影響 MyBatis 行為的設定和屬性資訊,可以配置如下配置:

  • properties(屬性)

    • 可以直接引入外部檔案

      <properties resource="db.properties"/>
      #db.properties
      driver=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3306/mybatis? useSSL=true&useUnicode=true&characterEncoding=UTF-8
      username=root
      password=root
    • 如果db.properties中沒有配置username和password,則可以可以在properties中增加一些屬性配置

      <properties resource="db.properties">
      <property name="username" value="root"/>
      <property name="password" value="root"/>
      </properties>
    • 如果兩個配置檔案和properties中存在同一欄位,如:都含有username這個欄位但是值不一樣,優先使用外部配置檔案

  • settings(設定)

    • 一個配置完整的settings元素的示例如下:

      <settings>
      1、<!--全域性地開啟或關閉所有對映器配置檔案中已配置的任何快取,有效值true|false,預設true-->
      <setting name="cacheEnabled" value="true"/>

      2、<!--
      延遲載入的全域性開關。
      當開啟時,所有關聯物件都會延遲載入。
      特定關聯關係中可通過設定 fetchType 屬性來覆蓋該項的開關狀態。
      有效值true|false,預設false
      -->
      <setting name="lazyLoadingEnabled" value="true"/>

      3、<!--是否允許單個語句返回多結果集(需要資料庫驅動支援),有效值true|false,預設true-->
      <setting name="multipleResultSetsEnabled" value="true"/>

      4、<!--
      使用列標籤代替列名
      實際表現依賴於資料庫驅動,具體可參考資料庫驅動的相關文件,或通過對比測試來觀察
      有效值true|false,預設true
      -->
      <setting name="useColumnLabel" value="true"/>

      5、<!--
      允許 JDBC 支援自動生成主鍵,需要資料庫驅動支援
      如果設定為 true,將強制使用自動生成主鍵
      儘管一些資料庫驅動不支援此特性,但仍可正常工作(如 Derby)
      有效值true|false,預設false
      -->
      <setting name="useGeneratedKeys" value="false"/>

      6、<!--
      指定 MyBatis 應如何自動對映列到欄位或屬性。
      NONE 表示關閉自動對映
      PARTIAL 只會自動對映沒有定義巢狀結果對映的欄位
      FULL 會自動對映任何複雜的結果集(無論是否巢狀)
      預設值為PARTIAL
      -->
      <setting name="autoMappingBehavior" value="PARTIAL"/>

      7、<!--
      指定發現自動對映目標未知列(或未知屬性型別)的行為。
      NONE: 不做任何反應
      WARNING: 輸出警告日誌
      FAILING: 對映失敗 (丟擲 SqlSessionException)
      預設值為NONE
      -->
      <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>

      8、<!--
      配置預設的執行器
      SIMPLE 就是普通的執行器
      REUSE 執行器會重用預處理語句(PreparedStatement)
      BATCH 執行器不僅重用語句還會執行批量更新
      預設值為SIMPLE-->
      <setting name="defaultExecutorType" value="SIMPLE"/>

      9、<!--
      設定超時時間,它決定資料庫驅動等待資料庫響應的秒數
      有效值為任意正整數 預設未設定 (null)
      -->
      <setting name="defaultStatementTimeout" value="25"/>

      10、<!--
      為驅動的結果集獲取數量(fetchSize)設定一個建議值,此引數只可以在查詢設定中被覆蓋。
      有效值為任意正整數 預設未設定 (null)
      -->
      <setting name="defaultFetchSize" value="100"/>

      11、<!--
      是否允許在巢狀語句中使用分頁(RowBounds),如果允許使用則設定為 false
      有效值true|false,預設false
      -->
      <setting name="safeRowBoundsEnabled" value="false"/>

      12、<!--
      是否開啟駝峰命名自動對映,即從經典資料庫列名A_COLUMN對映到經典Java屬性名aColumn
      有效值true|false,預設false
      -->
      <setting name="mapUnderscoreToCamelCase" value="false"/>

      13、<!--
      MyBatis 利用本地快取機制(Local Cache)防止迴圈引用和加速重複的巢狀查詢
      SESSION,會快取一個會話中執行的所有查詢
      STATEMENT,本地快取將僅用於執行語句,對相同 SqlSession 的不同查詢將不會進行快取 預設值為SESSION
      -->
      <setting name="localCacheScope" value="SESSION"/>

      14、<!--
      當沒有為引數指定特定的JDBC型別時,空值的預設JDBC型別
      某些資料庫驅動需要指定列的JDBC型別,多數情況直接用一般型別即可
      有效值為JdbcType常量,常用值:NULL、VARCHAR或OTHER,預設OTHER
      -->
      <setting name="jdbcTypeForNull" value="OTHER"/>

      15、<!--
      指定物件的哪些方法觸發一次延遲載入。
      有效值為用逗號分隔的方法列表:equals,clone,hashCode,toString
      -->
      <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
      </settings>
    • 具體可以檢視mybatis官網中關於settings的配置解釋

      mybatis中文文件 - settings

  • typeAliases(類型別名)

    • 降低冗餘的全限定類名書寫

    • 給具體某個類設定別名

      適合實體類不是特別多的情況

      <typeAliases>
      <typeAlias type="com.hmx.model.User" alias="User"/>
      </typeAliases>

      <!--設定別名後可以直接在resultType裡寫別名即可-->
      <select id="" resultType="User">
      </select>
    • 給包下所有類設定別名,預設類名首字母小寫為別名,可在類上加@Alise("aaa")註解指定別名

      適合實體類特別多的情況

      <typeAliases>
      <package name="com.hmx.model"/>
      </typeAliases>
  • environments(環境配置)

    • MyBatis 可以配置成適應多種環境,每個 SqlSessionFactory 例項只能選擇一種環境

    • transactionManager(事務管理器),type="[JDBC|MANAGED]"

    • dataSource(資料來源),type="[UNPOOLED|POOLED|JNDI]

      <environments default="development">
      <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
      </dataSource>
      </environment>
      </environments>
  • mappers(對映)

    • 方式一:

      <mappers>
      <mapper resource="com/hmx/dao/UserMapper.xml"/>
      </mappers>
    • 方式二:mapper介面和mapper.xml名字必須相同,而且必須放在一個包下

      <mappers>
      <mapper class="com.hmx.dao.UserMapper"/>
      </mappers>
    • 方式三:mapper介面和mapper.xml名字必須相同,而且必須放在一個包下

      <mappers>
      <package name="com.hmx.dao"/>
      </mappers>
  • typeHandlers(型別處理器)

  • objectFactory(物件工廠)

  • plugins(外掛)

  • databaseIdProvider(資料庫廠商標識)