更新時間:2021-06-21 12:04:02 來源:動力節(jié)點 瀏覽1143次
(1)properties
properties為屬性配置文件,它為上下文提供相關(guān)的資源,properties有三種配置資源的方式:
方式一:通過properties子元素配置
通過properties子元素property配置username和password變量,然后在properties下文environment節(jié)點中引用這些變量
<properties>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
在environments節(jié)點中引用username和password變量
<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="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
方式二:通過properise的屬性配置
<properties resource="demo/mybatis/resources/jdbc.properties"/>
方式三:通過屬性參數(shù)傳遞配置
即把屬性傳遞到SqlSessionFactoryBuilder.build()中
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
// ... or ...
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
Tip:當(dāng)在mybatis配置文件中同時存在三種方式時,優(yōu)先級順序如下:
1)首先讀取properties子元素屬性
2)其次讀取properties元素的屬性(resource和url)
3)最后讀取作為方法參數(shù)傳遞的屬性,并覆蓋以讀取的同名屬性
三種方式,存在優(yōu)先級,且排在后面的配置覆蓋排在前面同名屬性的配置,鑒于此,建議在配置時,不要使用混合方式。
(2)settings
settings決定mybatis運(yùn)行時行為,均有很多可配置的行為,如下為一個較完整的settings配置
View Code
(3)typeAliases
類型別名為Java類型設(shè)置一個簡短名字,它只與xml有關(guān),用來減少類完全限定名的冗余
<typeAliases>
<typeAlias type="demo.mybatis.entity.UserInfo" alias="UserInfo"/>
</typeAliases>
這樣配置后,任何使用demo.mybatis.entity.UserInfo的地方,都可用UserInfo來代替
除此之外,還可以指定一個包名,mybatis會在包名下搜索需要的Java Bean,比如:
<typeAliases>
<package name="demo.mybatis.entity"/>
</typeAliases>
在沒注解的情況下,每個在demo.mybatis.entity中的Java Bean,會使用 Bean 的首字母小寫的非限定類名來作為它的別名。 比如demo.mybatis.entity.UserInfo的別名為userInfo.
若存在注解,則別名為注解名。
POJO設(shè)置別名
@Alias("Users")
public class User{
}
Mapper.xml
<select id="getUserInfoById" resultType="Users">
SELECT user_name ,user_addr FROM user_info WHERE user_id=#{user_id}
</select>
(4)typeHandlers
typeHandlers主要將獲取的值合理地轉(zhuǎn)化為java類型,可以轉(zhuǎn)換預(yù)處理階段(PreparedStatement)的參數(shù)和結(jié)果集中的值。mybatis提供了標(biāo)準(zhǔn)的類型處理,
同時,mybatis也支持之定義處理類型,在自定義處理類型時,只需實現(xiàn)org.apache.ibatis.type.TypeHandler接口,或繼承org.apache.ibatis.type.BaseTypeHandler
(5)obejctFactory
(6)plugins
(7)environments
environments環(huán)境配置,mybatis支持多種配置,從而有助于適應(yīng)多種數(shù)據(jù)庫。但需要注意的是,盡管可以配置多個環(huán)境,但每個SqlSessionFactory實例只能選擇其一。
接受環(huán)境配置的兩個方法簽名:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);
忽略環(huán)境參數(shù),則加載默認(rèn)環(huán)境
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, properties);
如下為一個環(huán)境配置示例
<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="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
注釋:
默認(rèn)的環(huán)境 ID(比如:default="development")。
每個 environment 元素定義的環(huán)境 ID(比如:id="development")。
事務(wù)管理器的配置(比如:type="JDBC")。
數(shù)據(jù)源的配置(比如:type="POOLED")。
默認(rèn)的環(huán)境和環(huán)境 ID 是自解釋的,因此一目了然。你可以對環(huán)境隨意命名,但一定要保證默認(rèn)的環(huán)境 ID 要匹配其中一個環(huán)境 ID。
事務(wù)管理器:
Mybatis支持兩種類型的事務(wù)管理器:
jdbc:依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)作用域
managed:這個配置幾乎沒做什么。它從來不提交或回滾一個連接,而是讓容器來管理事務(wù)的整個生命周期(比如 JEE 應(yīng)用服務(wù)器的上下文)。
默認(rèn)情況下它會關(guān)閉連接,然而一些容器并不希望這樣,因此需要將 closeConnection 屬性設(shè)置為 false 來阻止它默認(rèn)的關(guān)閉行為。例如:
<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>
dataSource:
dataSource元素使用標(biāo)準(zhǔn)的JDBC數(shù)據(jù)源接口來配置JDBC連接對象的資源,有三種內(nèi)建的數(shù)據(jù)源類型:
UNPOOLED:這個數(shù)據(jù)源的實現(xiàn)只是每次被請求時打開和關(guān)閉連接
POOLED:這種數(shù)據(jù)源的實現(xiàn)利用“池”的概念將 JDBC 連接對象組織起來,避免了創(chuàng)建新的連接實例時所必需的初始化和認(rèn)證時間。 這是一種使得并發(fā) Web 應(yīng)用快速響應(yīng)請求的流行處理方式
JNDI:這個數(shù)據(jù)源的實現(xiàn)是為了能在如 EJB 或應(yīng)用服務(wù)器這類容器中使用,容器可以集中或在外部配置數(shù)據(jù)源,然后放置一個 JNDI 上下文的引用
(8)databaseIdProvider
databaseIdProvider主要功能是支持多廠商數(shù)據(jù)庫,它的實現(xiàn)原理是基于映射語句中的databaseId屬性。MyBatis 會加載不帶 databaseId 屬性和帶有匹配當(dāng)前數(shù)據(jù)庫
databaseId 屬性的所有語句。 如果同時找到帶有 databaseId 和不帶 databaseId 的相同語句,則后者會被舍棄。 為支持多廠商特性只要像下面這樣在 mybatis-config.xml
文件中加入 databaseIdProvider
<databaseIdProvider type="DB_VENDOR" />
(9)mappers
mappers關(guān)聯(lián)映射配置文件,即告訴mybatis到哪里去找映射配置文件。有四種基本方式可以關(guān)聯(lián)映射配置文件:
方式一:使用相對于類路徑的資源引用
<!--類路徑方式-->
<mapper resource="demo/mybatis/resources/userInfo-config.xml"/>
表示的程序目錄結(jié)構(gòu)如下:
方式二:使用完全限定資源定位符URL
假設(shè)映射文件路徑為:E:\userInfo-config.xml
則采用url方式如下:(格式為file:///url)
<mapper url="file:///E:/userInfo-config.xml"/>
方式三:使用映射器接口實現(xiàn)類的完全限定名
定義映射接口:
package demo.mybatis.service;
import demo.mybatis.entity.UserInfo;
import org.apache.ibatis.annotations.Select;
public interface UserInfoAnnotation {
@Select("SELECT user_name ,user_addr FROM user_info WHERE user_id=#{user_id}")
public UserInfo getUserInfoById(int user_id);
}
配置映射
<mapper class="demo.mybatis.service.UserInfoAnnotation"/>
方式四:將包內(nèi)的映射器接口實現(xiàn)全部注冊為映射器
<package name="demo.mybatis.service"/>
Mybatis九大類全局配置節(jié)點按照如下順序排序,位置不能顛倒。
properties=>settings=>typeAliases=>typeHandlers=>objectFactory=>plugins=>environment=>databaseIdProvider=>mappers
以上就是動力節(jié)點小編介紹的"配置MyBatis文件詳解",希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務(wù)。