MyBatis 自關聯介紹及多對一自關聯查詢的實現

2021-08-14 11:41:07 字數 1175 閱讀 5570

在多對

一、一對多、多對多查詢實際應用中可能會遇到這樣的情況:多個表的內容在乙個表裡,比如下面這個網頁結構

示意圖各個欄目,欄目下有子欄目,子欄目下有孫欄目,但是都屬於新聞欄目,比如我們想通過查詢sn得到下面的子欄目以及孫欄目,就需要用到自關聯查詢。

需求:查詢指定欄目及其下面的子欄目、孫欄目。

db表

實體類將其看作一方,然後關聯屬性是多方即setchildren;

介面: newslabel selectnewslabelbyid(int id);

對映檔案

測試類查詢欄目1得到的結果

查詢欄目2得到的結果

這時候問題就出現了,我們查詢欄目2時得到了其下的子欄目,但並沒有像我們需求提出的那樣,得到子欄目及其孫欄目,這就是自關聯查詢——多表連線查詢的乙個缺陷,解決這個問題我們可以通過多表單獨查詢得到。

多表單獨查詢:

對映檔案

其實這就是個遞迴,在查詢孫欄目時,再呼叫

查詢結果

很自然的解決了這個問題。

假如有這樣的需求:我們查詢指定欄目的子欄目和孫欄目,不包括這個欄目。

新建介面: listselectchildrenbyparent(int id);

(因為查詢出來是個集合型別)

對映檔案

mybatis關聯配置(一對多配置)

mybatis框架的關聯配置 首先假設我們資料庫中有兩個表,乙個表示move,另乙個是movetype,move裡面有乙個欄位typeid,與movetype表裡面的id相對應。相信大家已經看出來了,乙個movetype對應多個move,我們查詢move欄位的時候,必要的時候得顯示movetype的...

mybatis 關聯關係對映 一對多 ,多對多

一對多 用order訂單表,orderitem訂單項 來舉例 1.將資料表匯入資料庫中 3.修改order,orderitem實體類,建立實體對映關聯關係 一對多 多對一 一對多 乙個訂單對應多個訂單項 private listorderitems new arraylist 一對一 乙個訂單項對應...

雙向關聯多對多

inverse 反轉 1 inverse false 表示為主控方,主控方負責維護關聯關係,一般在一對多關係中,把多的一方設定為inverse false 2 lazy false表示是延遲載入,當為true時,啟動延遲載入,如兩個關聯a,b不延遲載入時可能載入a時候,也把b載入了,但你可能沒用b,...