mybatis配置文件屬性的詳解和db.propertis文件的使用

Mybatis核心配置文件SqlMapConfig.xml配置

核心配置文件中標籤的順序如下圖所示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3tJ04Zkp-1593517893543)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200628213840833.png)]

1.properties(屬性):

將核心配置文件的某些屬性(連接池的四大基本屬性),可以在外部的properties核心配置文件中通過表達式引用。

配置步驟:

第一步:定義properties文件,配置屬性信息
在這裏插入圖片描述
第二步:核心配置文件中引入外部屬性文件
在這裏插入圖片描述
​ 注意:標籤順序,properties處在跟標籤configuration下,第一順位的位子。

第三步:在覈心配置文件中使用表達式直接引用屬性值(因爲properties文件中存放的對象都是以鍵值對的形式存放),可以通過$符號,從中取出來。
在這裏插入圖片描述

2.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"/>
</settings>

3.typealiases(別名)

含義:給類名起別名,小名。**(使用簡短的單詞代替java類型的全限定名:包名+類名)**僅用於 XML 配置,意在降低冗餘的全限定類名書寫

使用:

在這裏插入圖片描述

typeAliases:別名標籤

type:類的全限定名

alias:別名

第二種方式起別名:

在這裏插入圖片描述

代指給當前包下所有的實體類起別名,當前包下類型的別名是類名,忽略大小寫。

第三種方式:下面是一些爲常見的 Java 類型內建的類型別名。它們都是不區分大小寫的,注意,爲了應對原始類型的命名重複,採取了特殊的命名風格

在這裏插入圖片描述

4.對象工廠(objectfactory)

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

// ExampleObjectFactory.java
public class ExampleObjectFactory extends DefaultObjectFactory {
  public Object create(Class type) {
    return super.create(type);
  }
  public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) {
    return super.create(type, constructorArgTypes, constructorArgs);
  }
  public void setProperties(Properties properties) {
    super.setProperties(properties);
  }
  public <T> boolean isCollection(Class<T> type) {
    return Collection.class.isAssignableFrom(type);
  }}
<!-- mybatis-config.xml -->
<objectFactory type="org.mybatis.example.ExampleObjectFactory">
  <property name="someProperty" value="100"/>
</objectFactory>

ObjectFactory 接口很簡單,它包含兩個創建實例用的方法,一個是處理默認無參構造方法的,另外一個是處理帶參數的構造方法的。 另外,setProperties 方法可以被用來配置 ObjectFactory,在初始化你的 ObjectFactory 實例後, objectFactory 元素體中定義的屬性會被傳遞給 setProperties 方法。

5.環境配置(environments)

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

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

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

environments元素定義瞭如何配置環境

<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>

注意:

默認使用的環境ID(比如:default=“development”)

每個environment元素定義的環境ID(比如:id=“development”)

事務管理器的配置(比如:type=“JDBC”)

數據源的配置(比如:type=“POOLED”)

6.映射器(mappers)

1.使用相對於類路徑的資源引用:mapper–resource
在這裏插入圖片描述
2.使用完全限定資源定位符(URL)

在這裏插入圖片描述
在這裏插入圖片描述

3.使用映射器接口實現類的完全限定類名

映射器接口實現類的完全限定類名:映射文件中的namespace屬性值,接口的全限定名

在這裏插入圖片描述

將映射文件放到接口包下,代替了實現類。

使用Eclipse開發過程中, 通常情況下,映射文件與接口在同一包下,名稱相同

4.將包內的映射器接口實現全部註冊爲映射器
在這裏插入圖片描述
將映射文件放到接口包下,代替了實現類。*

使用Eclipse開發過程中, 通常情況下,映射文件與接口在同一包下,名稱相同

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