官术网_书友最值得收藏!

任務4 掌握MyBatis的核心配置文件

學習完MyBatis的核心對象之后,接下來學習它的核心配置文件(mybatis-config. xml),該文件配置了MyBatis的一些全局信息,包含數據庫連接信息和MyBatis運行時所需的各種特性,以及設置和影響MyBatis行為的一些屬性。下面先來了解它的文件結構。

1.4.1 配置文件的結構

mybatis-config.xml文件需配置一些基本元素,值得注意的是,該配置文件的元素節點是有先后順序的,其文件結構如圖1.23所示。

圖1.23 MyBatis核心配置文件(mybatis-config.xml)結構圖

從圖1.23中可看出configuration元素是整個XML配置文件的根節點,相當于是MyBatis的總管,MyBatis所有的配置信息都會存放在這里面。MyBatis提供了設置這些配置信息的方法。Configuration可從配置文件里獲取屬性值,也可以通過程序直接設置。Configuration可供配置的內容如下。

1.properties元素

properties元素描述的都是外部化、可替代的屬性。這些屬性如何獲取?可以通過以下兩種方式實現。

(1)可通過外部指定的方式,即配置在典型的Java屬性配置文件中(如database. properties),并使用這些屬性對配置項實現動態配置。關鍵代碼如下。

database.properties:
  driver=com.mysql.jdbc.Driver
  url=jdbc:mysql://127.0.0.1:3306/smbms
  user=root
  password=root
mybatis-config.xml部分內容:
  <! -- 引入database.properties文件-->
  <properties resource="database.properties"/>
  ……
  <dataSource type="POOLED">
          <property name="driver" value="${driver}"/>
          <property name="url" value="${url}"/>
          <property name="username" value="${user}"/>
          <property name="password" value="${password}"/>
  </dataSource>

在上述代碼中,driver、url、username、password屬性將會用database.properties文件中的值來替換。

(2)直接配置為xml,并使用這些屬性對配置項實現動態配置。關鍵代碼如下。

mybatis-config.xml部分內容:

<! -- properties元素中直接配置property屬性-->
<properties>
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/>
    <property name="user" value="root"/>
    <property name="password" value="root"/>
</properties>
……
<dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${user}"/>
    <property name="password" value="${password}"/>
</dataSource>

在上述代碼中,driver、url、username、password將會由properties元素中設置的值來替換。

思考

若同時用了兩種方式,那么哪種方式優先呢?如以下代碼所示。

<properties resource="database.properties">
      <property name="user" value="root"/>
      <property name="password" value="123456"/>
</properties>

分析:這個例子中的property子節點設置的user和password的值會先被讀取,由于database.properties中也設置了這兩個屬性,所以resource中的同名屬性將會覆蓋property子節點的值。

結論:resource屬性值的優先級高于property子節點配置的值。

2.settings元素

settings元素的作用是設置一些非常重要的選項,用于設置和改變MyBatis運行中的行為。常用配置如表1-7所示。

表1-7 settings元素支持的屬性

提示

其他配置可參考MyBatis開發手冊。

3.typeAliases元素

typeAliases元素的作用是配置類型別名,通過與MyBatis的SQL映射文件相關聯,減少輸入多余的完整類名,以簡化操作。具體配置如示例10所示。

示例10

<typeAliases>
  <! --這里給實體類取別名,方便在mapper配置文件中使用-->
  <typeAlias alias="user" type="cn.smbms.pojo.User"/>
  <typeAlias alias="provider" type="cn.smbms.pojo.Provider"/>
  ……
</typeAliases>

以上這種寫法的弊端在于,如果一個項目中有多個POJO,需要一一進行配置。有更加簡化的寫法,就是通過package的name屬性直接指定包名,MyBatis會自動掃描指定包下的JavaBean,并設置一個別名,默認名稱為JavaBean的非限定類名。具體配置如示例11所示。

示例11

<typeAliases>
  <package name="cn.smbms.pojo"/>
</typeAliases>
那么UserMapper.xml中的配置如下。
<mapper namespace="cn.smbms.dao.user.UserMapper">
  <! -- 查詢用戶表記錄數 -->
  <select id="count" resultType="int">
      select count(1) as count from smbms_user
  </select>
  <! -- 查詢用戶列表 -->
  <select id="getUserList" resultType="User">
      select * from smbms_user
  /select>
</mapper>

另外,MyBatis已經為許多常見的Java基礎數據類型內建了相應的類型別名,一般都與其映射類型一致,并且都是大小寫不敏感的,比如映射的類型int、Boolean、String、Integer等,它們的別名就是int、Boolean、String、Integer。關于這部分內容,會在后續章節中詳細介紹。

4.environments元素

MyBatis可以配置多套運行環境,如開發環境、測試環境、生產環境等,我們可以靈活選擇不同的配置,從而將SQL映射到不同的數據庫環境上。不同的運行環境可以通過environments元素來配置,但是不管增加幾套運行環境,都必須要明確選擇出當前唯一的一個運行環境。這是因為每個數據庫都對應一個SqlSessionFactory實例,需要指明哪個運行環境將被創建,并把運行環境中設置的參數傳遞給SqlSessionFactoryBuilder。具體配置代碼如下。

<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="${user}"/>
        <property name="password" value="${password}"/>
      </dataSource>
  </environment>
  <! -- 測試環境 -->
  <environment id="test">
  ……
  </environment>
</environments>

上述代碼中,需要注意以下幾個關鍵點。

(1)默認的運行環境ID:通過default屬性來指定當前的運行環境ID為development,對于環境ID的命名要確保唯一。

(2)transactionManager事務管理器:設置其類型為JDBC(MyBatis有兩種事務管理類型,即JDBC和MANAGED),直接使用JDBC的提交和回滾功能,依賴于從數據源獲得連接來管理事務的生命周期。

(3)dataSource元素:使用標準的JDBC數據源接口來配置JDBC連接對象的資源。MyBatis提供了三種數據源類型(UNPOOLED、POOLED、JNDI),這里使用POOLED數據源類型。該類型利用“池”的概念將JDBC連接對象組織起來,減少了創建新的連接實例時所必需的初始化和認證時間,是MyBatis實現的簡單的數據庫連接池類型,它使數據庫連接可被復用,不必在每次請求時都去創建一個物理連接。對于高并發的Web應用,這是一種流行的處理方式,有利于快速響應請求。

5.mappers元素

mappers映射器用來定義SQL的映射語句,我們只需要告訴MyBatis去哪里找到這些SQL語句,即去哪里找相應的SQL映射文件,可以使用類資源路徑或者URL等,關鍵代碼如下。

(1)使用類資源路徑獲取資源

<mappers>
    <mapper resource="cn/smbms/dao/user/UserMapper.xml"/>
    <mapper resource="cn/smbms/dao/provider/ProviderMapper.xml"/>
</mappers>

(2)使用URL獲取資源

<mappers>
    <mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
    <mapper url="file:///E:/sqlmappers/ProviderMapper.xml"/>
</mappers>

以上這些配置告訴MyBatis如何找到SQL映射文件,而其更詳盡的配置信息存放在每個SQL映射文件里,我們將在后續章節中學習。

1.4.2 如何引入DTD文件

MyBatis有兩種配置文件:核心配置文件(mybatis-config.xml)和SQL映射文件(mapper. xml)(關于SQL映射文件,我們將在后續章節中深入學習)。這兩種配置文件都需要手動引入各自的DTD文件(mybatis-3-config.dtd和mybatis-3-mapper.dtd),并在IDE中進行相應配置,否則在編寫配置文件的時候,節點元素以及屬性等不能聯動。下面介紹具體引入方法。

1.DTD文件的位置

這兩個DTD文件放置在mybatis-3.2.2.jar里,解壓并打開壓縮包,DTD文件路徑為mybatis-3.2.2\org\apache\ibatis\builder\xml,如圖1.24所示。

圖1.24 DTD文件位置

將兩個文件復制出來,放置在一個統一的位置(如D:\),以方便下一步手動引入。

2.新增XML Catalog

在MyEclipse的工具欄中,選擇“Window→Preferences”選項,彈出如圖1.25所示窗口。

圖1.25 新增XML Catalog-1

選擇XML Catalog,在右側窗口選中User Specified Entries,單擊“Add”按鈕,彈出如圖1.26所示界面,并添加相關內容。

Location:單擊“File System”按鈕,選擇DTD文件位置(D:\ mybatis-3-config.dtd)或者選擇把DTD文件放入本項目工程中的某一固定位置,單擊“Workspace”按鈕進行引入。

Key type:Public ID(默認即可)。

圖1.26 新增XML Catalog-2

Key:-//mybatis.org//DTD Config 3.0//EN(與mybatis-config.xml文件頭中的“-//mybatis.org//DTD Config 3.0//EN”相同)。

保存完配置之后,即可在編寫mybatis-config.xml的時候,實現自動聯想節點元素以及屬性等,方便用戶操作。

mapper.xml文件配置同上,引入mybatis-3-mapper.dtd文件即可,此處不再贅述。

技能訓練

上機練習3——改造供應商表的查詢操作

需求說明

在前面練習的基礎上,完成以下改造。

(1)增加數據庫測試運行環境(如SQL Server數據庫或者另一臺測試服務器的MySQL數據庫),并完成由開發環境到測試環境的切換。

(2)更改properties元素對于數據庫信息的配置方式,直接配置為xml,并使用這些屬性對配置項實現動態配置,觀察resource屬性值和property子節點配置的優先級。

(3)使用typeAliases元素給POJO增加類型別名。

(4)對于mappers元素,使用URL方式來獲取SQL映射文件。

主站蜘蛛池模板: 新沂市| 吴川市| 宁蒗| 涞源县| 佛山市| 台南市| 石楼县| 固原市| 黄骅市| 平湖市| 柳州市| 广安市| 玉门市| 宝清县| 绥中县| 浦东新区| 沅江市| 将乐县| 九江县| 枣阳市| 舒城县| 公主岭市| 铜山县| 高陵县| 绵竹市| 吉安市| 高清| 红河县| 竹山县| 五大连池市| 张家界市| 柘荣县| 贵溪市| 大厂| 大悟县| 乌海市| 株洲县| 赤峰市| 启东市| 兴仁县| 丹东市|