MyBatis全局配置文件詳解

MyBatis全局配置文件

MyBatis 的配置文件包含了影響 MyBatis 行爲甚深的設置(settings)和屬性(properties)信息。文檔的

頂層結構如下:

configuration 配置

• properties 屬性

• settings 設置

• typeAliases 類型命名

• typeHandlers 類型處理器

• objectFactory 對象工廠

• plugins 插件

• environments 環境

• environment 環境變量

• transactionManager 事務管理器

• dataSource 數據源

• databaseIdProvider 數據庫廠商標識

• mappers 映射器

properties 屬性

mybatis 可以使用properties來引入外部properties配置文件的內容

resource:引入類路徑下的資源

url:引入網絡路徑或者磁盤路徑下的資源

<properties resource="dbconfig.properties"></properties>

如果屬性在不只一個地方進行了配置,那麼 MyBatis 將按照下面的順序來加載:

– 在 properties 元素體內指定的屬性首先被讀取。

– 然後根據 properties 元素中的 resource 屬性讀取類路徑下屬性文件或根據 url 屬性指定的路徑讀取屬性文件,並覆蓋已讀取的同名屬性。 – 最後讀取作爲方法參數傳遞的屬性,並覆蓋已讀取的同名屬性。

settings 設置

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

setting包含很多重要的設置項

setting:用來設置每一個設置項

name:設置項名

value:設置項的取值

mapUnderscoreToCamelCase:駝峯命名 last_name -> lastName

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

typeAliases 類型命名

typeAliases:可以批量設置別名這個包下的每一個類

別名不區分大小寫

創建一個默認的別名,就是簡單類名小寫

typeAlias:爲某個java類型起別名

type:指定要起別名的類型全類名;默認別名就是類名小寫:employee

alias:指定新的別名

package:爲某個包下的所有類批量起別名

name:指定包名(爲當前包下以及下面所有的後代包的每一個類都起一個默認的別名(類名小寫))

存在的問題:

假設bean包下有一個類Employee,同時在bean包下有一個子包也有一個類叫Employee,此時這兩個包的類名就會衝突,因此還可以使用註解的放上爲類創建別名

 @Alias("")

public class Employee{}

值得注意的是,MyBatis已經爲許多常見的 Java 類型內建了相應的類型別名。它們都是大小寫不敏感的,我們在起別名的時候千萬不要佔用已有的別名。

environments 環境

mybatis可以配置多種環境 default指定使用某種環境,可以達到快速切換

environments:配置一個具體的環境信息;必須有兩個標籤,id代表當前環境的唯一標識

transactionManager  事務管理器

type:事務管理器的類型 [JDBC(使用了 JDBC 的提交和回滾設置,依賴於從數據源得到的連接來管理事務範圍。)|MANAGED(不提交或回滾一個連接、讓容器來管理事務的整個生命週期(比如 JEE應用服務器的上下文))]

JDBC:JdbcTransactionFactory

自定義事務管理器 實現TransactionFactory接口即可

dataSource          數據源

type:數據源的類型 [UNPOOLED(不使用連接池)|POOLED(使用連接池)|JNDI(在EJB 或應用服務器這類容器中查找指定的數據源)]

自定義數據源 實現DataSourceFactory接口

實際開發中我們使用Spring管理數據源,並進行事務控制的配置來覆蓋上述配置

databaseIdProvider 數據庫廠商標識

databaseIdProvider: 可以根據不同的數據庫廠商執行不同的語句。

type:數據庫類型 DB_VENDOR

作用就是得到數據庫廠商標識(驅動自帶的),mybatis就能根據數據庫廠商標識來執行不同的sql

MYSQL Oracle SQL Server

value:爲標識起一個別名,方便SQL語句使用databaseId屬性引用

DB_VENDOR

– 會通過 DatabaseMetaData#getDatabaseProductName() 返回的字符串進行設置。由於通常情況下這個字符串都非常長而且相同產品的不同版本會返回不同的值,所以最好通過設置屬性別名來使其

變短

• MyBatis匹配規則如下:

– 1、如果沒有配置databaseIdProvider標籤,那麼databaseId=null

– 2、如果配置了databaseIdProvider標籤,使用標籤配置的name去匹配數據庫信息,匹配上設置databaseId=配置指定的值,否則依舊爲null

– 3、如果databaseId不爲null,他只會找到配置databaseId的sql語句

– 4、MyBatis 會加載不帶 databaseId 屬性和帶有匹配當前數據庫databaseId 屬性的所有語句。如果同時找到帶有 databaseId 和不帶databaseId 的相同語句,則後者會被捨棄。

mappers 映射器

mapper:註冊一個sql映射

註冊配置文件

resource:引用類路徑下的sql映射文件

url:用網路路徑下的或者磁盤路徑下的sql映射文件

註冊接口

class:引應用接口

1、接口映射文件,映射文件名必須和接口同名,並且放在同一個目錄下

2、沒有sql映射文件,所有的sql利用註解寫在接口上

註解寫在接口上

推薦:比較重要和複雜額Dao接口寫sql映射文件,不重要的簡單的爲了開發快速可以使用註解

package:批量註冊

sql映射文件

namespace:名稱空間;指定爲接口的全類名

id:唯一標識

resultType:返回值類型

#{id}:從傳遞過來的參數中取出id值

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="school.xauat.mybatis.dao.EmployeeMapper">
    <select id="getEmpById" resultType="employee" >
        select * from tbl_employee where id = #{id}
    </select>
    <select id="getEmpById" resultType="employee" databaseId="mysql">
        select * from tbl_employee where id = #{id}
    </select>
    <select id="getEmpById" resultType="employee" databaseId="oracle">
        select * from tbl_employee where id = #{id}
    </select>
</mapper>

總結

1、接口是編程

原生:         Dao   ----->  DaoImpl

Mybatis:        Mapper  ----->  xxMapper.xml

2、SqlSession代表和數據庫的一次會話,用完必須關閉

3、SqlSession和connection一樣,都是非線程安全的。每次使用都應該獲取新的對象

4、mapper接口沒有實現類,但是Mybatis會爲這個接口生成一個代理對象(將接口和xml進行綁定)

EmployeeMapper empMapper = SqlSession.getMapper(Employee.class);

5、兩個重要的配置文件

mybatis的全局配置文件;包含數據庫連接池信息,事務管理器信息,系統運行信息

sql映射文件:保存了每一個SQL語句的映射信息

將sql抽取出來

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