MyBatis 學習(二)

一、XML 配置文件

1、XML 映射配置文件的結構

configuration 配置

  properties 屬性

  settings 設置

  typeAliases 類型別名

  typeHandlers 類型處理器

  objectFactory 對象工廠

  plugins 插件

  environments 環境

    environment 環境變量

      transactionManager 事務管理器

      dataSource 數據源

  databaseIdProvider 數據庫廠商標識

  mappers 映射器

2、properties 屬性

  屬性都是可外部配置且可動態替換的,既可以在典型的 Java 屬性文件中配置,亦可通過 properties 元素的子元素來傳遞。

<!--properties屬性-->
    <properties resource="config.properties">
        <property name="username" value="root"/>
        <property name="password" value="admin"/>
    </properties>

  然後其中的屬性就可以在整個配置文件中被用來替換需要動態配置的屬性值。

<dataSource type="POOLED">
  <property name="driver" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</dataSource>

3、settings 設置

  這是 MyBatis 中極爲重要的調整設置,它們會改變 MyBatis 的運行時行爲

一個配置完整的 settings 元素:

<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="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <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"/>

4、typeAliases 類型別名

  類型別名就是給 java 類型取一個短的別名,只與 xml 配置有關,意義是減少類完全限定名的冗餘。也就是說可以用一個短的別名來代替一個長的類完全限定名,爲了方便。

<!--配置別名-->
<typeAliases>
    <typeAlias alias="Product" type="com.mybatis.pojo.Product"/>
</typeAliases>

  當這樣配置時,Product可以用在任何使用com.mybatis.pojo.Product的地方。例如在mapper文件中:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 
 6 <mapper namespace="com.mybatis.mapper.ProductMapper">
 7     <insert id="addProduct" parameterType="Product">
 8       INSERT INTO product (name, price) VALUES (#{name}, #{price})
 9     </insert>
10 </mapper>

  本來 parameterType 後面應該寫 com.mybatis.pojo.Product 類完全限定名的,現在可以用 Product 別名代替。

  也可以指定一個包名,MyBatis 會在包名下面搜索需要的 Java Bean。

<!--配置別名-->
<typeAliases>
    <package name="com.mybatis.pojo"/>
</typeAliases>

  現在寫mapper文件時也可以直接用 Product來代替 com.mybatis.pojo.Product,因爲 Mybatis 會自動搜索 com.mybatis.pojo 下的 Product 類

  一些常見的 Java 類型內建的相應的類型別名。它們都是大小寫不敏感的,需要注意的是由基本類型名稱重複導致的特殊處理。

5、typeHandlers 類型處理器

 

6、對象工廠(objectFactory)

  MyBatis 每次創建結果對象的新實例時,它都會使用一個對象工廠(ObjectFactory)實例來完成。默認的對象工廠需要做的僅僅是實例化目標類,要麼通過默認構造方法,要麼在參數映射存在的時候通過參數構造方法來實例化。如果想覆蓋對象工廠的默認行爲,則可以通過創建自己的對象工廠來實現。

 

7、插件(plugins)

 

8、配置環境(environments)

  MyBatis 可以配置成適應多種環境,這種機制有助於將 SQL 映射應用於多種數據庫之中, 現實情況下有多種理由需要這麼做。例如,開發、測試和生產環境需要有不同的配置;或者共享相同 Schema 的多個生產數據庫, 想使用相同的 SQL 映射。許多類似的用例。

不過要記住:儘管可以配置多個環境,每個 SqlSessionFactory 實例只能選擇其一。

所以,如果你想連接兩個數據庫,就需要創建兩個 SqlSessionFactory 實例,每個數據庫對應一個。而如果是三個數據庫,就需要三個實例,依此類推,記起來很簡單:

 

    <!--配置別名-->
    <typeAliases>
        <package name="com.mybatis.pojo"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <!--事務管理:JDBC的事務管理機制-->
            <transactionManager type="JDBC"/>
            <!--配置連接池:數據源-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>

 

9、databaseIdProvider

 

10、映射器(mappers)

  需要告訴 MyBatis 到哪裏去找到SQL映射語句。可以使用相對於類路徑的資源引用, 或完全限定資源定位符(包括 file:/// 的 URL),或類名和包名等。

<!-- 使用相對於類路徑的資源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定資源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口實現類的完全限定類名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 將包內的映射器接口實現全部註冊爲映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章