注:代碼已托管在<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>表如下:

查詢指定目錄的所有子孫目錄,我們需要使用遞歸的思想,查出目前欄目之後,需要将目前欄目的<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>隻執行一次,這樣就可以實作查詢自身一次,遞歸查詢子孫欄目的功能:
單元測試:
【作者簡介】:
秦懷,公衆号【秦懷雜貨店】作者,技術之路不在一時,山高水長,縱使緩慢,馳而不息。
此文章僅代表自己(本菜鳥)學習積累記錄,或者學習筆記,如有侵權,請聯系作者核實删除。人無完人,文章也一樣,文筆稚嫩,在下不才,勿噴,如果有錯誤之處,還望指出,感激不盡~