MyBatis框架:第六章:mybatis的核心配置
mybatis的核心配置之properties
創(chuàng)建jdbc.properties
一般在實際的項目中。數(shù)據(jù)庫的連接信息。會存放在一個jdbc.properties的屬性配置文件中
username=root
password=root
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
在mybatis-config.xml中修改引入properties資源
<!-- properties 配置一些屬性。使用的時候,用${name} 進(jìn)行輸出
resource指定屬性的位置
-->
<properties resource="jdbc.properties">
<!-- 也可以在properties配置中定義一些屬性。當(dāng)然并不推薦 -->
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
特別說明:引入的jdbc.properties屬性文件中的信息,會覆蓋掉原來使用property標(biāo)簽定義的屬性值。
修改原來數(shù)據(jù)庫連接的信息。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- 配置數(shù)據(jù)庫連接信息 -->
<property name="driver" value="${driverClass}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
mybatis的核心配置之settings
這是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會改變 MyBatis 的運行時行為。常用的設(shè)置參數(shù)
cacheEnabled 該配置影響的所有映射器中配置的緩存的全局開關(guān)。 true | false 默認(rèn)值true
lazyLoadingEnabled 延遲加載的全局開關(guān)。當(dāng)開啟時,所有關(guān)聯(lián)對象都會延遲加載。 特定關(guān)聯(lián)關(guān)系中可通過設(shè)置fetchType屬性來覆蓋該項的開關(guān)狀態(tài)。 true | false 默認(rèn)值false
lazyLoadTriggerMethods 指定哪個對象的方法觸發(fā)一次延遲加載。
mybatis的核心配置之typeAliases
類型別名是為 Java 類型設(shè)置一個短的名字。它只和 XML 配置有關(guān),存在的意義僅在于用來減少類完全限定名的冗余。
<!-- typeAliases 可以配置別名 -->
<typeAliases>
<!--
typeAlias 配置一個別名
type 是具體的全類名
alias 是別名
<typeAlias type="com.atguigu.pojo.User" alias="user"/> -->
<!-- 通過配置包名,讓程序自動掃描所有包下的類,自動加別名
自動加的別名是。類名首字母小寫
User user
-->
<package name="com.atguigu.pojo"/>
<package name="com.atguigu.entity"/>
</typeAliases>
mybatis的核心配置之typeHandlers:這個我不經(jīng)常用
JDK8,新特性,時間的處理。類型處理器。
<typeHandlers>
<typeHandler handler="org.apache.ibatis.type.InstantTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.LocalDateTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.LocalTimeTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.OffsetDateTimeTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.OffsetTimeTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.ZonedDateTimeTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.YearTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.MonthTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.YearMonthTypeHandler" />
<typeHandler handler="org.apache.ibatis.type.JapaneseDateTypeHandler" />
</typeHandlers>
mybatis的核心配置之environments和transactionManager
<!--
environments標(biāo)簽用來定義多個數(shù)據(jù)庫環(huán)境
-->
<environments default="development">
<!-- environment用來定義一個數(shù)據(jù)庫環(huán)境 -->
<environment id="development">
<!--
transactionManager配置事務(wù)管理器
事務(wù)管理器類型有兩種:
JDBC – 這個配置就是直接使用了 JDBC 的提交和回滾設(shè)置,它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)范圍。
MANAGED – 這個配置幾乎沒做什么。它從來不提交或回滾一個連接,而是讓容器來管理事務(wù)的整個生命周期(比如 JEE 應(yīng)用服務(wù)器的上下文)。
-->
<transactionManager type="JDBC"/>
<!-- 修改數(shù)據(jù)庫的四個連接屬性 -->
<dataSource type="POOLED">
<property name="driver" value="${driverClass}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
environments
一般情況下。在工作的時候。會定義多個環(huán)境信息。
那么定義多個環(huán)境有什么用?
比如說:我可以定義一個環(huán)境是dev開發(fā)環(huán)境。可以在自己寫代碼的時候測試用。連接的是自己的數(shù)據(jù)庫。
又定義一個環(huán)境run是實際布暑的數(shù)據(jù)庫連接環(huán)境。
那么當(dāng)我們要發(fā)布項目的時候。只需要把default值改為run就好
transactionManager
JDBC (JdbcTransactionFactory) – 這個配置就是直接使用了 JDBC 的提交和回滾設(shè)置,它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)范圍。
<transactionManager type=“JDBC” />
MANAGED (ManagedTransactionFactory)– 這個配置幾乎沒做什么。它從來不提交或回滾一個連接,而是讓容器來管理事務(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>
自定義:實現(xiàn)TransactionFactory接口,然后在type=全類名
注意:如果你正在使用 Spring + MyBatis,則沒有必要配置事務(wù)管理器, 因為 Spring 模塊會使用自帶的管理器來覆蓋前面的配置。一般情況下,我們都會整合Spring + MyBatis 一起使用。使用的都是Spring的事務(wù)管理。
dataSource 標(biāo)簽說明
<dataSource type=“POOLED”>
這個標(biāo)簽是配置是否啟動數(shù)據(jù)庫連接池配置。
type 屬性的值有三種: UNPOOLED 、 POOLED 、 JNDI
UNPOOLED – 這個數(shù)據(jù)源的實現(xiàn)只是每次被請求時打開和關(guān)閉連接。雖然一點慢,它對在及時可用連接方面沒有性能要求的簡單應(yīng)用程序是一個很好的選擇。 不同的數(shù)據(jù)庫在這方面表現(xiàn)也是不一樣的,所以對某些數(shù)據(jù)庫來說使用連接池并不重要,這個配置也是理想的。
POOLED – 這種數(shù)據(jù)源的實現(xiàn)利用“池”的概念將 JDBC 連接對象組織起來,避免了創(chuàng)建新的連接實例時所必需的初始化和認(rèn)證時間。 這是一種使得并發(fā) Web 應(yīng)用快速響應(yīng)請求的流行處理方式。
JNDI – (Java Naming and Directory Interface) 這個數(shù)據(jù)源的實現(xiàn)是為了能在如 EJB 或應(yīng)用服務(wù)器這類容器中使用,容器可以集中或在外部配置數(shù)據(jù)源,然后放置一個 JNDI 上下文的引用。
自定義 - 實現(xiàn)DataSourceFactory接口,定義自己的數(shù)據(jù)源實現(xiàn)。
注意:一般情況下,我們都全整合Spring + MyBatis 一起使用。所以數(shù)據(jù)源整合之后都是使用Spring的數(shù)據(jù)源。
mybatis的核心配置之databaseIdProvider
MyBatis 可以根據(jù)不同的數(shù)據(jù)庫廠商執(zhí)行不同的語句,這種多廠商的支持是基于映射語句中的 databaseId 屬性。 MyBatis 會加載不帶 databaseId 屬性和帶有匹配當(dāng)前數(shù)據(jù)庫 databaseId 屬性的所有語句。
<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver" />
<property name="MySQL" value="mysql" />
<property name="DB2" value="db2" />
<property name="Oracle" value="oracle" />
</databaseIdProvider>
mybatis提供了一個類VendorDatabaseIdProvider,中的getDatabaseId() 方法用于獲取數(shù)據(jù)庫的標(biāo)識。
property 標(biāo)簽name屬性是獲取數(shù)據(jù)庫ID標(biāo)識。
property 標(biāo)簽value屬性是我們給mybatis定義的一個簡短的標(biāo)識。
databaseId測試
這樣子,我們就可以在mapper的配置文件中,在定義sql語句的時候,添加標(biāo)識。
<select id="selectUserById" parameterType="int"
resultType="User" databaseId="mysql">
select id , last_name from t_user where id = #{value}
</select>
這樣子,當(dāng)mybaits讀取mapper中的sql語句的時候,只會讀取和數(shù)據(jù)庫標(biāo)識對應(yīng)得上的sql語句。
如果把 databaseId屬性改為oracle。而當(dāng)前的數(shù)據(jù)庫是mysql的話。
<select id="selectUserById" parameterType="int"
resultType="User" databaseId="oracle">
那么 執(zhí)行selectUserById 語句的時候就會報錯。
mybatis的核心配置之Mapper
把mapper配置文件注入到mybatis-config.xml核心配置文件中有三種常用方式。
1、在classpath路徑下引入
2、使用mapper接口的形式導(dǎo)入配置
3、使用包掃描的方式引入配置文件
<!-- 從classpath路徑下導(dǎo)入指定的配置文件 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml" />
<mapper resource="org/mybatis/builder/BlogMapper.xml" />
<mapper resource="org/mybatis/builder/PostMapper.xml" />
</mappers>
<!-- 使用mapper接口類導(dǎo)入配置文件 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper" />
<mapper class="org.mybatis.builder.BlogMapper" />
<mapper class="org.mybatis.builder.PostMapper" />
</mappers>
<!-- 掃描包下所有的配置文件
1、接口名和Mapper配置文件名必須相同
2、接口文件和Mapper配置文件必須在同一個包下
-->
<mappers>
<package name="org.mybatis.builder" />
</mappers>