天天看點

Mybatis【17】-- Mybatis自關聯查詢一對多查詢

注:代碼已托管在<code>GitHub</code>上,位址是:<code>https://github.com/Damaer/Mybatis-Learning</code> ,項目是<code>mybatis-13-oneself-one2many</code>,需要自取,需要配置<code>maven</code>環境以及<code>mysql</code>環境(<code>sql</code>語句在<code>resource</code>下的<code>test.sql</code>中),覺得有用可以點個小星星。

<code>docsify</code>文檔位址在:<code>https://damaer.github.io/Mybatis-Learning/#/</code>

所謂自關聯查詢,是指自己既然充當一方,又充當多方。比如新聞欄目的資料表,自己可以是父欄目,也可以是多方,子欄目。在資料表裡面實作就是一張表,有一個外鍵<code>pid</code>,用來表示該欄目的父欄目,一級欄目沒有父欄目的,可以将其外鍵設定為0。

<code>DB</code>表如下:

Mybatis【17】-- Mybatis自關聯查詢一對多查詢

查詢指定目錄的所有子孫目錄,我們需要使用遞歸的思想,查出目前欄目之後,需要将目前欄目的<code>id</code>作為下一級欄目的<code>pid</code>。

實體類<code>NewsLabel.java</code>,使用一對多的關系:

定義<code>sql</code>接口:

<code>mapper.xml</code>檔案,在遞歸裡面使用本身<code>sql</code>:

測試類<code>MyTest.java</code>:

結果:

這樣的寫法隻能選出子孫欄目,不能将自己的資訊輸出。

添加一個<code>sql</code>的接口:

<code>mapper</code>檔案裡面實作,在<code>resultMap</code>裡面遞歸調用另一個<code>sql</code>,最外層的<code>sql</code>隻執行一次,這樣就可以實作查詢自身一次,遞歸查詢子孫欄目的功能:

單元測試:

【作者簡介】:

秦懷,公衆号【秦懷雜貨店】作者,技術之路不在一時,山高水長,縱使緩慢,馳而不息。

此文章僅代表自己(本菜鳥)學習積累記錄,或者學習筆記,如有侵權,請聯系作者核實删除。人無完人,文章也一樣,文筆稚嫩,在下不才,勿噴,如果有錯誤之處,還望指出,感激不盡~

繼續閱讀