本文轉載自:https://blog.csdn.net/z_ssyy/article/details/81706876
Mybatis關聯查詢的兩種方式
首先要了解對象的三種關聯方式
*數據庫表的關聯關系有三種,一對一,一對多,多對多
一對一 是通過在任意一方的主鍵,引入對方主鍵作為外鍵來實現的,就是說主鍵與外鍵為同一字段
一對多 是通過在“多”的一方,添加“一”的一方的主鍵作為外鍵
多對多 是通過一張中間關系表,引入兩張表的主鍵作為外鍵,兩個主鍵成為聯合主鍵或使用新的字段作為主鍵
*在java類中關聯關系也有三種,一對一,一對多,多對多
一對一 在本類中定義對方類型的對象,如A類中定義B類類型的屬性b,B類中定義A類類型的屬性a
一對多 一個A類類型對應多個B類類型的情況,需要在A類中以集合的方式引入B類類型的對象,在B類中定義A類類型的屬性a
多對多 在A類中定義B類類型的集合,在B類中定義A類類型的集合
三種關聯guan關系都有兩種關聯查詢的方式,嵌套查詢,嵌套結果
*Mybatis的yanc延遲加載配置
在全局配置文件中加入下面代碼
<settings>
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
在映射文件中,<association>元素和<collection>元素中都已默認配置了延遲加載屬性,即默認屬性fetchType="lazy"(屬性fetchType="eager"表示立即加載),所以在配置文件中開啟延遲加載后,無需在映射文件中再做配置
1一對一
使用<association>元素進行一對一關聯映射非常簡單,只需要參考如下兩種示例配置即可
2.一對多
<resultMap>元素中,包含了一個<collection>子元素,MyBatis就是通過該元素來處理一對多關聯關系的
<collection>子元素的屬性大部分與<association>元素相同,但其還包含一個特殊屬性--ofType
ofType屬性與javaType屬性對應,它用於指定實體對象中集合類屬性所包含的元素類型。
<collection >元素的使用也非常簡單,同樣可以參考如下兩種示例進行配置,具體代碼如下:
3.多對多
多對多的關聯關系查詢,同樣可以使用前面介紹的<collection >元素進行處理(其用法和一對多關聯關系查詢語句用法基本相同)
所以就不在累贅了
總結:這兩種方式各有各的優缺點,嵌套查詢的查詢語句寫起來簡單,但是執行的sql語句多,性能要低一點,嵌套結果的查詢語句寫起來難一點,而且sql語句只執行一條,性能相對較高;剛開始用可能會遇到很多細節問題,但是慢慢熟悉了,感覺就會好很多,用起來也得心應手了
————————————————
版權聲明:本文為CSDN博主「六月·飛雪」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/z_ssyy/article/details/81706876