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。
在sqlMapConfig.xml加載屬性文件:
properties特性:
注意: MyBatis 將按照下面的順序來加載屬性:
? 在 properties 元素體內定義的屬性首先被讀取。
? 然后會讀取properties 元素中resource或 url 加載的屬性,它會覆蓋已讀取的同名屬性。
? 最后讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性。
建議:
不要在properties元素體內添加任何屬性值,只將屬性值定義在properties文件中。
在properties文件中定義屬性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX
settings全局參數配置
mybatis框架在運行時可以調整一些運行參數。
比如:開啟二級緩存、開啟延遲加載。。
全局參數將會影響mybatis的運行行為。
typeAliases(別名)重點
- 需求
在mapper.xml中,定義很多的statement,statement需要parameterType指定輸入參數的類型、需要resultType指定輸出結果的映射類型。
如果在指定類型時輸入類型全路徑,不方便進行開發,可以針對parameterType或resultType指定的類型定義一些別名,在mapper.xml中通過別名定義,方便開發。 - 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 -
自定義別名
(1)單個別名定義
2.png
引用別名:
3.png
(2)批量定義別名(常用)
4.png - typeHandlers(類型處理器)
mybatis中通過typeHandlers完成jdbc類型和java類型的轉換。
通常情況下,mybatis提供的類型處理器滿足日常需要,不需要自定義. -
mappers(映射配置)
(1)通過resource加載單個映射文件
5.png
(2)通過mapper接口加載單個mapper
6.png
按照上邊的規范,將mapper.java和mapper.xml放在一個目錄 ,且同名。
7.png
(3)批量加載mapper(推薦使用)
8.png -
輸入映射
通過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.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
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
8.1.3 修改mapper.xml
WHERE id=1 OR id=10 OR id=16
在查詢條件中,查詢條件定義成一個sql片段,需要修改sql片段。
8.1.4 測試代碼
8.1.5 另外一個sql的實現: