這個配置主要是引入咱們的 properites 配置文件的:mysql
<properties resource="db.properties"/> <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>
能夠看到咱們使用 <properties resource="db.properties"/>
引入了咱們的數據據庫的配置文件,而後這個標籤有兩個屬性 : resource
和 uri
第一種直接是引用項目下的文件。第二個就是引用網絡路徑的和咱們本地文件系統的資源。<!--more-->sql
很是重要!!!數據庫
<!--全局配置--> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
裝了Mybatis 插件的話咱們會看到咱們的設置的代碼提示,都不用本身去記的。apache
能夠爲咱們的 Java 類型取別名。避免咱們去寫很長的類包名,等等。而且這裏提供了三種取別名的方式:緩存
<typeAliases> <typeAlias type="lwen.entries.Employee" alias="emp"/> </typeAliases>
這就是給咱們的 Java 類取的別名,咱們在 xml 中配置返回值,參數,命名空間的時候就不用寫那麼長了。咱們直接寫 emp
便可,可是注意的是咱們若是不寫 alias
屬性他就會配置默認的別名,也就是咱們的類名首字母小寫。在這裏就是employee
服務器
批量取別名,有時候咱們的一個包下面的類太多了咱們但願給他們都取上默認別名,咱們就可使用這個標籤,可是注意這個標籤不能和 typeAlias標籤共存 ,這個標籤指定的包實際上是對咱們的這個包以及他的子包進行別名操做,而且都是默認別名網絡
<typeAliases> <package name="lwen.entries"/> </typeAliases>
由於上面的兩個標籤不能同時存在,因此咱們沒辦法給某一個包下的特定的類取別名,這裏咱們就須要使用 @Alias
來作註解別名了,這樣能夠解決上面的問題。session
@Alias("emps")
其實除了這些咱們須要自定義的一些別名,系統幫咱們預先設定好了不少經常使用的別名:oracle
別名映射的類型_bytebyte_longlong_shortshort_intint_integerint_doubledouble_floatfloat_booleanbooleanstringStringbyteBytelongLongshortShortintIntegerintegerIntegerdoubleDoublefloatFloatbooleanBooleandateDatedecimalBigDecimalbigdecimalBigDecimalobjectObjectmapMaphashmapHashMaplistListarraylistArrayListcollectionCollectioniteratorIteratorapp
能夠看到規律就是類名小寫,而後基本類型就是下劃線。
這個東西其實就是把咱們的Java類型和數據庫的類型相對應,這裏暫時不具體說。
插件功能,對下面對象的方法進行攔截,他的原理就是動態代理。
<environments default="dev"> <environment id="dev"> <transactionManager type="JDBC"> <property name="hah" value="heh"/> </transactionManager> <dataSource type="POOLED"> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
最外層就是咱們的 environments 這個就是配置各類環境(好比:開發,測試,線上...),因此說咱們的這個標籤有一個 default
屬性,就是用來制定咱們的具體激活哪一個環境的,這裏用的是 dev 。而後下面就是具體的環境了,環境的 id 就是咱們配置的環境的名稱,每個環境裏有且只有兩個屬性,就是 transactionManager
和 dataSource
他們必須配置不然會報錯。
能夠看到 transactionManager
有一個 Type 就是用來指定使用哪一個食物管理器,這裏它使用了 JDBC 的,其實在Mybatis中只有兩種:type=」[JDBC|MANAGED]」
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
而後咱們就很好奇這些 MANAGED
之類的東西在哪有定義,咱們是否能夠配置本身的書屋管理器好比強大的 Spring的事務管理。
org.apache.ibatis.session.Configuration
在這個類裏咱們發現了
typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class); typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class); typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class); typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class); typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);
也就是說他們都是別名而已。那麼咱們就能夠配置本身的類了,咱們直接在 type 位置寫上咱們的事務管理器全類名,或者使用別名機制也能夠。具體的對應的類須要什麼特性咱們直接看看他原本自帶的兩個類就明白了。
顯然下面的配置數據源也是如此,默認的採用了鏈接池,也就是咱們的 sqlSession 對象會被緩存起來不用每次去數據庫裏獲取。
MyBatis 能夠根據不一樣的數據庫廠商執行不一樣的語句,這種多廠商的支持是基於映射語句中的databaseId
屬性。 MyBatis 會加載不帶 databaseId
屬性和帶有匹配當前數據庫 databaseId
屬性的全部語句。 若是同時找到帶有 databaseId
和不帶 databaseId
的相同語句,則後者會被捨棄。
咱們經過設置屬性別名來使其變短 :
<databaseIdProvider type="DB_VENDOR"> <property name="SQL Server" value="sqlserver"/> <property name="DB2" value="db2"/> <property name="Oracle" value="oracle" /> <property name="MySQL" value="mysql" /> </databaseIdProvider>
而後咱們在 mapper 的xml文件中就能夠匹配這些數據提供商:
<select id="getEmployeeById" resultType="lwen.entries.Employee" databaseId="mysql"> select * from employee where id=#{id} </select> <select id="getEmployeeById" resultType="lwen.entries.Employee" databaseId="oracle"> select * from employee where id=#{id} </select>
那麼他會按照數據源來肯定當前是哪一個數據源,咱們須要使用哪一個sql語句。這些都是自動進行的,無需咱們的干預。
這個就是用來配置咱們的 mapper 的 xml 標籤了。咱們在裏面配置 xml 有如下三種方式:
<!--咱們的mapper文件的位置--> <mappers> <mapper resource="EmployeeMapper.xml"/> <mapper resource="EmployeeMapperInterface.xml"/> </mappers>
顯然這個地方的 mapper 標籤還有兩個屬性 分別就是 resource
和 uri
就是和上面是同樣的。
<package name="lwen"/>
lwen 包下面的xml 映射文件都被加載進去。
咱們可使用對應的註解 註解名
就是咱們的 sql 語句的動做。 @Select
Update
等等
注意以上的標籤都是有順序的,順序不能隨便配置