Mybatis學(xué)習(xí)(SqlMapConfig.xml)

mybatis的全局配置文件SqlMapConfig.xml,配置內(nèi)容如下:

properties(屬性)
settings(全局配置參數(shù))
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環(huán)境集合屬性對象)
environment(環(huán)境子屬性對象)
transactionManager(事務(wù)管理)
dataSource(數(shù)據(jù)源)
mappers(映射器)

properties屬性

需求:
將數(shù)據(jù)庫連接參數(shù)單獨配置在db.properties中,只需要在SqlMapConfig.xml中加載db.properties的屬性值。
在SqlMapConfig.xml中就不需要對數(shù)據(jù)庫連接參數(shù)硬編碼。
將數(shù)據(jù)庫連接參數(shù)只配置在db.properties中,原因:方便對參數(shù)進行統(tǒng)一管理,其它xml可以引用該db.properties。


10.png

在sqlMapConfig.xml加載屬性文件:


1.png

properties特性:
注意: MyBatis 將按照下面的順序來加載屬性:
? 在 properties 元素體內(nèi)定義的屬性首先被讀取。
? 然后會讀取properties 元素中resource或 url 加載的屬性,它會覆蓋已讀取的同名屬性。
? 最后讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性。
建議:
不要在properties元素體內(nèi)添加任何屬性值,只將屬性值定義在properties文件中。
在properties文件中定義屬性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

settings全局參數(shù)配置

mybatis框架在運行時可以調(diào)整一些運行參數(shù)。
比如:開啟二級緩存、開啟延遲加載。。
全局參數(shù)將會影響mybatis的運行行為。

typeAliases(別名)重點
  1. 需求
    在mapper.xml中,定義很多的statement,statement需要parameterType指定輸入?yún)?shù)的類型、需要resultType指定輸出結(jié)果的映射類型。
    如果在指定類型時輸入類型全路徑,不方便進行開發(fā),可以針對parameterType或resultType指定的類型定義一些別名,在mapper.xml中通過別名定義,方便開發(fā)。
  2. mybatis默認支持別名
    別名 映射的類型
    _byte byte
    _long long
    _short short
    _int int
    _integer int
    _double double
    _float float
    _boolean boolean
    string String
    byte Byte
    long Long
    short Short
    int Integer
    integer Integer
    double Double
    float Float
    boolean Boolean
    date Date
    decimal BigDecimal
    bigdecimal BigDecimal
  3. 自定義別名
    (1)單個別名定義


    2.png

    引用別名:


    3.png

    (2)批量定義別名(常用)
    4.png
  4. typeHandlers(類型處理器)
    mybatis中通過typeHandlers完成jdbc類型和java類型的轉(zhuǎn)換。
    通常情況下,mybatis提供的類型處理器滿足日常需要,不需要自定義.
  5. mappers(映射配置)
    (1)通過resource加載單個映射文件


    5.png

    (2)通過mapper接口加載單個mapper


    6.png

    按照上邊的規(guī)范,將mapper.java和mapper.xml放在一個目錄 ,且同名。
    7.png

    (3)批量加載mapper(推薦使用)
    8.png
  6. 輸入映射
    通過parameterType指定輸入?yún)?shù)的類型,類型可以是簡單類型、hashmap、pojo的包裝類型。
    6.1 傳遞pojo的包裝對象
    6.1.1 需求
    完成用戶信息的綜合查詢,需要傳入查詢條件很復(fù)雜(可能包括用戶信息、其它信息,比如商品、訂單的)
    6.1.2 定義包裝類型pojo
    針對上邊需求,建議使用自定義的包裝類型的pojo。
    在包裝類型的pojo中將復(fù)雜的查詢條件包裝進去。


    1.png

    6.1.3mapper.xml
    在UserMapper.xml中定義用戶信息綜合查詢(查詢條件復(fù)雜,通過高級查詢進行復(fù)雜關(guān)聯(lián)查詢)。


    2.png

    6.1.4 mapper.java
    3.png

    6.1.5 測試代碼
    4.png
  7. 輸出映射
    7.1 resultType
    使用resultType進行輸出映射,只有查詢出來的列名和pojo中的屬性名一致,該列才可以映射成功。
    如果查詢出來的列名和pojo中的屬性名全部不一致,沒有創(chuàng)建pojo對象。
    只要查詢出來的列名和pojo中的屬性有一個一致,就會創(chuàng)建pojo對象。
    7.1.1 輸出簡單類型
    7.1.1.1 需求
    用戶信息的綜合查詢列表總數(shù),通過查詢總數(shù)和上邊用戶綜合查詢列表才可以實現(xiàn)分頁。
    7.1.1.2 mapper.xml


    5.png

    7.1.1.3 mapper.java


    6.png

    7.1.1.4 測試代碼
    7.png

    7.1.2 輸出pojo對象和pojo列表
    不管是輸出的pojo單個對象還是一個列表(list中包括pojo),在mapper.xml中resultType指定的類型是一樣的。
    在mapper.java指定的方法返回值類型不一樣:
    1、輸出單個pojo對象,方法返回值是單個對象類型
    1.png

    2、輸出pojo對象list,方法返回值是List<Pojo>
    2.png

    生成的動態(tài)代理對象中是根據(jù)mapper方法的返回值類型確定是調(diào)用selectOne(返回單個對象調(diào)用)還是selectList (返回集合對象調(diào)用 ).

    7.2 ResultMap
    mybatis中使用resultMap完成高級輸出結(jié)果映射。
    7.2.1 resultMap使用方法
    如果查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個映射關(guān)系。
    1、定義resultMap
    2、使用resultMap作為statement的輸出映射類型
    7.2.2 將下邊的sql使用User完成映射
    SELECT id id_,username username_ FROM USER WHERE id=#{value}
    User類中屬性名和上邊查詢列名不一致。
    7.2.2.1 定義reusltMap


    3.png

    7.2.2.2 使用resultMap作為statement的輸出映射類型
    4.png

    7.2.2.3 mapper.java
    5.png

    7.2.2.4 測試
    6.png

    7.3 小結(jié)
    使用resultType進行輸出映射,只有查詢出來的列名和pojo中的屬性名一致,該列才可以映射成功。
    如果查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個映射關(guān)系。
    8.1 什么是動態(tài)sql
    mybatis核心 對sql語句進行靈活操作,通過表達式進行判斷,對sql進行靈活拼接、組裝。
    8.2 需求
    用戶信息綜合查詢列表和用戶信息查詢列表總數(shù)這兩個statement的定義使用動態(tài)sql。
    對查詢條件進行判斷,如果輸入?yún)?shù)不為空才進行查詢條件拼接。
    8.3 mapper.xml
    7.png

    8.png

    8.4 測試代碼
    9.png

    8.5 sql片段
    8.5.1 需求
    將上邊實現(xiàn)的動態(tài)sql判斷代碼塊抽取出來,組成一個sql片段。其它的statement中就可以引用sql片段。
    方便程序員進行開發(fā)。

    8.5.2 定義sql片段


    10.png

    8.5.3 引用sql片段
    在mapper.xml中定義的statement中引用sql片段:
    11.png
12.png

8.1 foreach
向sql傳遞數(shù)組或List,mybatis使用foreach解析
8.1.1 需求
在用戶查詢列表和查詢總數(shù)的statement中增加多個id輸入查詢。
sql語句如下:
兩種方法:
SELECT * FROM USER WHERE id=1 OR id=10 OR id=16
SELECT * FROM USER WHERE id IN(1,10,16)
8.1.2 在輸入?yún)?shù)類型中添加List<Integer> ids傳入多個id


1.png

8.1.3 修改mapper.xml
WHERE id=1 OR id=10 OR id=16
在查詢條件中,查詢條件定義成一個sql片段,需要修改sql片段。


2.png

8.1.4 測試代碼
3.png

8.1.5 另外一個sql的實現(xiàn):
4.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容