根元素<configuration>,子元素:java
這些子元素的配置是有順序的,只能按照上面的順序配置。mysql
可缺省部分子元素。spring
用於將內部的配置外在化,在<properties>中引入外部配置便可。sql
好比數據庫的鏈接信息,咱們能夠直接寫在全局配置文件中:數據庫
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT"/> <property name="username" value="chy"/> <property name="password" value="abcd"/> </dataSource> </environment> </environments>
考慮到更換數據庫時,運維從一大堆代碼很差找數據庫的鏈接信息,咱們能夠把數據庫的鏈接信息拿出來,單獨寫在一個配置文件中。緩存
sql.properties:服務器
mysql_driver=com.mysql.cj.jdbc.Driver mysql_url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT mysql_username=chy mysql_password=abcd #oracle_driver=..... #oracle_url=..... #oracle_username=..... #oracle_password=.....
mybatis-config.xml:mybatis
<properties resource="sql.properties"></properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${mysql_driver}"/> <property name="url" value="${mysql_url}"/> <property name="username" value="${mysql_username}"/> <property name="password" value="${mysql_password}"/> </dataSource> </environment> </environments>
用於設置mybatis運行時的參數。經常使用的項有:併發
通常只需配置logImpl:oracle
<settings> <setting name="logImpl" value="LOG4J"/>
</settings>
若是不使用日誌框架,能夠缺省此配置。
用於配置pojo類別名。
在映射文件中,若是parameterType、 resultType是本身寫的pojo類,必須使用全限定類名:
resultType="com.chy.pojo.Student"
又臭又長,很麻煩。可使用別名。
<typeAliases>
<typeAlias type="com.chy.pojo.Student" alias="Student"/>
<typeAlias type="com.chy.pojo.Teacher" alias="Teacher"/>
</typeAliases>
resultType="Student"
直接寫別名便可。
若是缺省alias屬性,默認爲類名的camel寫法,好比Student => student。
@Alias(value = "Student") public class Student { //...... }
能夠缺省屬性名,簡寫爲
@Alias("Student")
若是以爲一個一個地配置pojo類很麻煩,可使用包自動掃描:
<typeAliases>
<package name="com.chy.pojo"/>
</typeAliases>
這個包下全部的pojo類都使用camel命名方式的別名。
在映射文件中使用別名有一個缺點:Ctrl+左鍵不會轉到定義處。
將參數傳給預處理語句時,須要將數據從javaType(java類型)轉換爲jdbcType(jdbc類型);
將結果集中的數據轉換爲指定類型時,須要將數據從jdbcType轉換爲javaType。
這2個過程都要用到typeHandler(類型轉換器)。通常咱們使用mybatis自帶的類型轉換器便可,也能夠在<typeHandlers>中引用自定義的類型轉換器。
ObjectFactory負責建立結果實例。
將查詢結果映射爲指定對象時,默認的ObjectFactory先調用無參的構造器建立pojo類的實例,再調用setter方法注入值。
通常咱們使用默認的ObjectFactory便可,也能夠在<objectFactory>中引用自定義的ObjectFactory類。
mybatis容許在將查詢結果映射爲指定類型的過程當中,以插件形式執行自定義的代碼。
環境配置,mybatis是持久層框架,它的環境天然是數據庫,即數據庫的配置。
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${mysql_driver}"/> <property name="url" value="${mysql_url}"/> <property name="username" value="${mysql_username}"/> <property name="password" value="${mysql_password}"/> </dataSource> </environment> </environments>
通常要配置多個環境,開發一個環境,正式使用一個環境。default指定要使用哪一個<environment>。
一個<environment>即一個環境(數據庫配置)。
<transactionManager>指定使用哪一種事務管理,一般使用JDBC的事務管理。若是搭配Spring使用,通常使用Spring的事務管理(在spring中配置事務管理),不在mybatis中配置事務。
<dataSource>配置數據源,mybatis提供了三種數據源:
type指定使用哪一種數據源,<property>子元素設置具體選項。
不使用鏈接池,適合對性能沒有要求的、簡單的應用程序。
經常使用屬性:
操做數據庫速度更快,適合高併發的程序,很經常使用。
經常使用屬性:
用於引入映射文件。寫法不少,經常使用的有3種:
<mappers> <mapper resource="com/chy/mapper/StudentMapper.xml"/> <mapper resource="com/chy/mapper/TeacherMapper.xml"/> </mappers>
<mappers>
<mapper class="com.chy.mapper.StudentMapper"/>
</mappers>
<mappers>
<package name="com.chy.mapper"/>
</mappers>
這種最經常使用,能夠一次性引入mapper包下全部的映射文件。