Mybatis學習(SqlMapConfig.xml)

mybatis的全局配置文件SqlMapConfig.xml,配置內容如下:

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

properties屬性

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


10.png

在sqlMapConfig.xml加載屬性文件:


1.png

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

settings全局參數配置

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

typeAliases(別名)重點
  1. 需求
    在mapper.xml中,定義很多的statement,statement需要parameterType指定輸入參數的類型、需要resultType指定輸出結果的映射類型。
    如果在指定類型時輸入類型全路徑,不方便進行開發,可以針對parameterType或resultType指定的類型定義一些別名,在mapper.xml中通過別名定義,方便開發。
  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類型的轉換。
    通常情況下,mybatis提供的類型處理器滿足日常需要,不需要自定義.
  5. mappers(映射配置)
    (1)通過resource加載單個映射文件


    5.png

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


    6.png

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

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


    1.png

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


    2.png

    6.1.4 mapper.java
    3.png

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

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

    7.2 ResultMap
    mybatis中使用resultMap完成高級輸出結果映射。
    7.2.1 resultMap使用方法
    如果查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個映射關系。
    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 小結
    使用resultType進行輸出映射,只有查詢出來的列名和pojo中的屬性名一致,該列才可以映射成功。
    如果查詢出來的列名和pojo的屬性名不一致,通過定義一個resultMap對列名和pojo屬性名之間作一個映射關系。
    8.1 什么是動態sql
    mybatis核心 對sql語句進行靈活操作,通過表達式進行判斷,對sql進行靈活拼接、組裝。
    8.2 需求
    用戶信息綜合查詢列表和用戶信息查詢列表總數這兩個statement的定義使用動態sql。
    對查詢條件進行判斷,如果輸入參數不為空才進行查詢條件拼接。
    8.3 mapper.xml
    7.png

    8.png

    8.4 測試代碼
    9.png

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

    8.5.2 定義sql片段


    10.png

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

8.1 foreach
向sql傳遞數組或List,mybatis使用foreach解析
8.1.1 需求
在用戶查詢列表和查詢總數的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 在輸入參數類型中添加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的實現:
4.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的...
    笨鳥慢飛閱讀 5,678評論 0 4
  • Java數據持久化之mybatis 一. mybatis簡介 1.1 原始的JDBC操作: Java 通過 Jav...
    小Q逛逛閱讀 4,968評論 0 16
  • 官方文檔 簡介 入門 XML配置 XML映射文件 動態SQL Java API SQL語句構建器 日志 一、 JD...
    拾壹北閱讀 3,552評論 0 52
  • 1 引言# 本文主要講解JDBC怎么演變到Mybatis的漸變過程,重點講解了為什么要將JDBC封裝成Mybait...
    七寸知架構閱讀 76,634評論 36 979
  • 九月的第一天 中小學生開學的時間到了 微信、微博上娃們的家長 比娃們還興奮 開學啦 記住要早睡早起 不要遲到 記住...
    三峽纖夫閱讀 183評論 0 0