自學Mybatis系列(2)——Mybatis配置元素


寫在前面:十分感謝《深入淺出Mybatis技術原理與實戰(zhàn)》這本書,大多數(shù)地方是書上的話,希望自己能在后面的文章中多寫一些自己的理解。而且最重要的是!每次照書無腦敲的時候,都好羞愧?。êπ吣槪:竺嬉欢ㄗ⒁膺@些問題。最后要感謝點贊、評論以及指正的朋友們,你們是墜吼的!!


MyBatis配置元素

MyBatis配置xml文件的層次結構是不能夠顛倒順序的,在解析的過程中,如果出現(xiàn)什么問題的話可以來這里查看一下下。先看一段文件:

<?xml version"1.0" encoding="UTF-8"?>
<!-- 配置 -->
<configuration> 
    <!-- 屬性 -->
    <properties/>
    <!-- 設置 -->
    <settings/> 
    <!-- 類型命名 -->
    <typeAliases/> 
    <!-- 類型處理器 -->
    <typeHandlers/> 
    <!-- 對象工廠 -->
    <objectFactory/>
    <!-- 插件 -->
    <plugins/>
    <!-- 配置環(huán)境 -->
    <environments>
        <!-- 環(huán)境變量 -->
        <environment>
            <!-- 事務管理器 -->
            <transactionManager/>
            <!-- 數(shù)據(jù)源-->
            <dataSource/>
        </environment>
    </environments>
    <!-- 數(shù)據(jù)庫廠商標識 -->
    <databaseIdProvider/>
    <!-- 映射器 -->
    <mappers/>
</configuration> 

這是MyBatis的全部配置,相信很多人第一眼看完之后會發(fā)出和我一樣的感慨:霧草!這都是什么東西?但是其實理解后還是蠻簡單的,而且很多東西我們在初級的使用中,讓它默認就好,我也會在眾多的配置方式中,省去繁瑣不必要的部分,直接介紹最好用的給大家。那么寫這篇文的目的就在于——好好的了解他們一下,簡單知道他們分別都是做啥的!接下來不要方,我們一個個的來,嘿嘿嘿。

1.Properties 元素

顧名思義,properties是配置屬性的元素。這個呢,是必要的,因為在JDBC我們要設定driver、url、username和password。而在配置中,我們直接把這些東西放到Properties元素中即可,是必要而且簡單的東西。
有三種方式供選擇:

  • property 子元素
  • properties 配置文件
  • 程序參數(shù)傳遞
    第一種方式:property 子元素
<dataSource type="POOLED">
  <property name="driver" value=“com.mysql.jdbc.Driver”/>
  <property name="url" value=“jdbc:mysql://localhost:端口號/數(shù)據(jù)庫名”/>
  <property name="username" value=“數(shù)據(jù)庫用戶名“/>
  <property name="password" value=“數(shù)據(jù)庫密碼”/>
</dataSource>

配置:這個是dataSource了,不知道它在哪里的請看上面那個全部配置元素展示~在dataSource里直接用'$'符號,

<dataSource type="POOLED">
     <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
</dataSource>

第二種方式: properties 配置文件
properties文件:

    driver= com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:端口號/數(shù)據(jù)庫名
    username= 數(shù)據(jù)庫用戶名
    password= 數(shù)據(jù)庫密碼

我們把這個配置文件放在源包下,引入它就可以了。

<properties resource=“jdbc.properties/>

當然還有第三種方式:通過程序參數(shù)傳遞

這里先不寫代碼了,因為好多啊,而且以現(xiàn)有的知識去研究,不太好理解的,可以等前兩個先用6了然后再研究這個,這里先寫一下什么情況使用它。

在開發(fā)中,數(shù)據(jù)庫的密碼往往掌握在運維人員的手中,對搞開發(fā)的來說,這些屬于機密文件,而這些密碼往往都是通過運維人員加密的,我們是沒辦法通過加密的字符串去直接連接數(shù)據(jù)庫的!那么就要在生成SqlSessionFactory之前通過代碼將加密的字符串轉化成明文!吶,這是個解碼的過程。系統(tǒng)提供的解密方法是decode(str)…不過我倒是感覺吧,每個公司如果要加密的話,解碼方法要視情況而定,到時候知道這個途徑就隨機應變咯。
這里說一下優(yōu)先級的問題:通過參數(shù)傳遞的屬性具有最高優(yōu)先級,然后是resource/url屬性中指定的配置文件,最后是properties屬性中指定的屬性。
最好還是別混合亂用了,多亂啊。最好的方式就是通過properties文件!如果需要處理加密解密啥的,最好使配置來自同一個配置文件。

2.Settings 元素

Settings的Mybatis最復雜也是最重要的元素,它可以改變Mybatis的運行行為,但是!最重要的但是!即使我們不配置Settings,我們依然可以正常使用Mybatis!Settings的配置內容簡直多的令人發(fā)指!我相信就算我全寫下來,大家也沒打個耐心看,就算有那個耐心看,也肯定記不??!(此處省略10000字介紹......)

3.typeAliases 元素

別名是個指代名稱。其實很簡單的東西如果總結起來就太麻煩了,我們需要知道的是,Mybatis系統(tǒng)定義了一系列經(jīng)常使用的類型的別名,例如:數(shù)值、字符串、日期和集合。比如要用Map了,我們不需要寫java.util.Map,直接寫map就好啦!
重點要說的是自定義別名,因為我們有很多實體類,如果每次都按照路徑去寫豈不是很累(滑稽臉)。

<!—定義別名—>
<typeAliases>
    <typeAliases alias=“role” type=“com.cream.model.Role”>
</typeAliases>

利用這種途徑,我們就可以使用role來代替完整路徑,方便很多!
但是如果我們有很多類呢?這樣的話,設置起來就很麻煩。所以介紹第二種方式給大家:通過自動掃描的形式自定義別名。

<typeAliases>
    <package name=“com.cream.study1.model”/>
    <package name=“com.cream.study2.model”/>
</typeAliases>
    ```
    定義別名的方式是使用注解 @Alias,比如:
    ```
    @Alias(“role”)
    public class Role {
        //coding……
    }
    ```
    配合起來之后,Mybatis自動掃描指定的package,注意的是,配置包掃描的路徑之后,沒有@Alias注解的Mybatis也會被裝載,然后把類名的第一個字母變成小寫,作為Mybatis的別名。建議使用一部分的包名+類名的格式去限定,以避免出現(xiàn)重名的情況。
####4.typeHandler 元素
typeHandler是類型處理器,,Mybatis在預處理語句中設置參數(shù)的時候,從結果集取出值的時候,都會用已注冊的typeHandler去處理。
typeHandler允許根據(jù)項目的需要去自定義設置Java傳遞到數(shù)據(jù)庫的參數(shù)中。還有從數(shù)據(jù)庫讀數(shù)據(jù)出來的時候,我們也需要進行特殊處理。這些情況都可以通過自定義typeHandler去處理。
其實系統(tǒng)定義的typeHandler就可以實現(xiàn)大部分的功能了,也很多,使用的時候,可以查一查。
注意事項:
數(shù)值類型的精度,數(shù)據(jù)庫int、double、decimal與java中的精度、長度是不一樣的。
時間精度,取到日:DateOnlyTypeHandler。取到秒:SqlTimerstamp。額,都可以源碼查看。想看例子的直接查官方文檔就好,忽視其他的英文,直接看代碼ok,個人感覺這個是挺復雜的一個東西。
####ObjectFactory元素
ObjectFactory是有結果返回的時候,構造實體類(POJO)的,大部分的場景下我們都不用修改,當然想自定義也可以,恩。。。知道這些就好!下一個!
####Plugins元素
插件很復雜,書上概括下來就是,如果不懂原理,那么就完全無法掌握插件的使用,而且插件用不好的話就會是一個很危險的東西!所以無法簡單理解。以后研究研究再單獨寫一寫。
####environments配置環(huán)境
它很關鍵,environments是配置環(huán)境,他可以注冊多個數(shù)據(jù)源dataSource,數(shù)據(jù)源包括數(shù)據(jù)源的配置和數(shù)據(jù)庫事務(transactionManager)的配置。
配置數(shù)據(jù)源

<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<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>

這里粘的是源碼的示例。
- environments中的屬性default,標明我們默認啟用的數(shù)據(jù)源配置。
- environment中的id是設置這個數(shù)據(jù)源的標識。
- transactionManager配置數(shù)據(jù)庫的事務,type有三種配置方式。
  1.JDBC:采用jdbc方式管理事務,獨立編碼中常用。
  2.MANAGED:采用容器方式管理事務,在JNDI數(shù)據(jù)源中常用。
  3.自定義:用于特殊應用,自己定義數(shù)據(jù)庫事務管理。
- property 元素是配置數(shù)據(jù)源的各類屬性,比如說可以name處寫"autoCommit",value寫"false",這樣就代表著數(shù)據(jù)源不自動提交。
- dataSource :配置數(shù)據(jù)源連接的信息,type屬性設置我們對數(shù)據(jù)庫連接方式的配置。
  1.UNPOOLED,非連接池數(shù)據(jù)庫。
  2.POOLED,連接池數(shù)據(jù)庫。
  3.JNDI,JNDI數(shù)據(jù)源。
  4.自定義
這里說一下數(shù)據(jù)庫事務,在Mybaits把事務交由SqlSession控制,我們可以通過SqlSession執(zhí)行commit提交,或者roolback回滾。
簡單打個比方:A去銀行轉賬,余額100塊,A要給B轉200塊,但是A余額不足,轉賬失敗了,這時候就需要回滾事務。否則A雖然失敗了,但B卻可以收到200塊。
大部分工作環(huán)境下使用Spring控制。

再來討論一下數(shù)據(jù)源:
Mybatis提供了三種數(shù)據(jù)源連接方式:
  1.UNPOOLED:非連接池。
  2.POOLED:連接池。
  3.JNDI:通過JndiDataSourceFactory獲取數(shù)據(jù)源。
當然我們可以自定義數(shù)據(jù)源,他必須實現(xiàn):org.apache.ibatis.datasource.DataSourceFactory
接口,當我們使用了spring框架,配置就會很簡單
####databaseIdProvider數(shù)據(jù)庫廠商標識
相同數(shù)據(jù)庫廠商環(huán)境下,數(shù)據(jù)庫廠商標識沒啥意義。Mybatis如果運行在不同廠商的數(shù)據(jù)庫的話,可以提供標識,但是一般情況下都不會使用多廠商的數(shù)據(jù)庫。
####映射器
簡單說一下引入映射器的方法(官方文檔代碼)
1.用文件路徑引入。

<mappers>

<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

2.用類注冊引入映射器。


<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

3.用包名引入。


<mappers>
<package name="org.mybatis.builder"/>
</mappers>

4.用xml文件引入。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,248評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評論 6 342
  • Java數(shù)據(jù)持久化之mybatis 一. mybatis簡介 1.1 原始的JDBC操作: Java 通過 Jav...
    小Q逛逛閱讀 5,408評論 0 16
  • I love you not for who you are, but for who I am with you...
    小豬咕嚕嚕閱讀 241評論 0 0

友情鏈接更多精彩內容