當前位置:
首頁 > 最新 > Mybatis配置文件

Mybatis配置文件

映射文件

配置文件和映射文件還有挺多的屬性我還沒有講的,現在就把它們一一補全

在mapper.xml文件中配置很多的sql語句,執行每個sql語句時,封裝為MappedStatement對象,mapper.xml以statement為單位管理sql語句

Statement的實際位置就等於namespace+StatementId

佔位符

在Mybatis中,有兩種佔位符

#{}解析傳遞進來的參數數據

${}對傳遞進來的參數原樣拼接在SQL中

主鍵生成策略

如果我們在Hibernate中,當我們插入數據的時候,我們是可以選擇是UUID策略的…

那麼在Mybatis是怎麼做的呢??

UUID

主鍵返回

如果我們一般插入數據的話,如果我們想要知道剛剛插入的數據的主鍵是多少,我們可以通過以下的方式來獲取

需求:

user對象插入到資料庫後,新記錄的主鍵要通過user對象返回,通過user獲取主鍵值。

解決思路:

通過LAST_INSERT_ID()獲取剛插入記錄的自增主鍵值,在insert語句執行後,執行select LAST_INSERT_ID()就可以獲取自增主鍵。

mysql:

oracle:

實現思路:

先查詢序列得到主鍵,將主鍵設置到user對象中,將user對象插入資料庫。

resultMap

有的時候,我們看別的映射文件,可能看不到以下這麼一段代碼:

因為,如果我們的數據表的欄位和JavaBean的屬性名稱是相同時,我們就不用上面那段代碼了。Mybatis會自動幫我們把返回的結果進行封裝成JavaBean

那當我們數據表的欄位和JavaBean的屬性名稱不是相同時,我們就需要使用resultMap,也就是上面那段代碼

當然了,在正常情況下列名和JavaBean的屬性名一般都是不同的,因此還是需要resultMap的。

resultMap和resultType區別

resultType :指定輸出結果的類型(pojo、簡單類型、hashmap..),將sql查詢結果映射為java對象 。

使用resultType注意:sql查詢的列名要和resultType指定pojo的屬性名相同,指定相同 屬性方可映射成功,如果sql查詢的列名要和resultType指定pojo的屬性名全部不相同,list中無法創建pojo對象的。

resultMap:將sql查詢結果映射為java對象。

如果sql查詢列名和最終要映射的pojo的屬性名不一致,使用resultMap將列名和pojo的屬性名做一個對應關係 (列名和屬性名映射配置)

使用resultMap

這裡寫圖片描述

這裡寫圖片描述

resultType和resultMap用法總結

resultType:

作用:

將查詢結果按照sql列名pojo屬性名一致性映射到pojo中。

場合:

常見一些明細記錄的展示,將關聯查詢信息全部展示在頁面時,此時可直接使用resultType將每一條記錄映射到pojo中,在前端頁面遍歷list(list中是pojo)即可。

resultMap:

使用association和collection完成一對一和一對多高級映射。

association:

作用:

將關聯查詢信息映射到一個pojo類中。

場合:

為了方便獲取關聯信息可以使用association將關聯訂單映射為pojo,比如:查詢訂單及關聯用戶信息。

collection:

作用:

將關聯查詢信息映射到一個list集合中。

場合:

為了方便獲取關聯信息可以使用collection將關聯信息映射到list集合中,比如:查詢用戶許可權範圍模塊和功能,可使用collection將模塊和功能列表映射到list中。

Collection在前面好像並沒有用過,下面就看一下它的用法:

Order與OrderDetails關係

SQL語句

resultMap

一般地使用resultMap會多一點。

Mybatis映射文件處理特殊字元

第一種方法:

用了轉義字元把>和

SELECT * FROM test WHERE 1 = 1 AND start_date = CURRENT_DATE

第二種方法:

配置文件

別名

typeAliases別名:

這裡寫圖片描述

自定義別名:

Mapper載入

延遲載入

在進行數據查詢時,為了提高資料庫查詢性能,盡量使用單表查詢,因為單表查詢比多表關聯查詢速度要快。

如果查詢單表就可以滿足需求,一開始先查詢單表,當需要關聯信息時,再關聯查詢,當需要關聯信息再查詢這個叫延遲載入

在Mybatis中延遲載入就是在resultMap中配置具體的延遲載入..

這裡寫圖片描述

在Mybatis的文件中配置全局延遲載入

延遲載入測試

當需要用戶時調用 Orders類中的getUser()方法執行延遲載入 ,向資料庫發出sql。

由於是對User進行延遲載入,那麼我們只要查詢Orders相關的信息即可了

使用resultMap來配置延遲載入

這裡寫圖片描述

總結

在程序中調用的SQL語句是由映射文件的命令空間+sql片段的id所組成的。它內部會生成一個Statement對象的。

在使用別名的時候,可以指定包名,在使用總配置文件載入映射文件時,也可以指定包名。

主鍵如果需要返回的話,使用selectKey 標籤即可。UUID也可以返回。在Oracle的話,是使用序列來返回自動增長的主鍵的。

佔位符有兩種,一種是解析傳遞進來的參數數據、一種是原樣輸出傳遞進來的數據。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java3y 的精彩文章:

Hibernate面試題大全

TAG:Java3y |