怎樣使用MyBatis輕松實現遞歸查詢與存儲過程調用,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
成都創新互聯公司是一家業務范圍包括IDC托管業務,網絡空間、主機租用、主機托管,四川、重慶、廣東電信服務器租用,南充服務器托管,成都網通服務器托管,成都服務器租用,業務范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區的互聯網數據服務公司。
由于部門的層級不可控,因此如果我想要獲取所有部門的完整json的話,就要采用遞歸調用,使用Java代碼處理遞歸有點low,剛好MyBatis的ResultMap中的collection可以很方便的解決這個問題,核心代碼如下:
<resultMap id="BaseResultMap" type="org.sang.bean.Department"> <id property="id" column="id"/> <result column="name" property="name"/> <result column="parentId" property="parentId"/> <result column="isParent" property="isParent"/> <collection property="children" ofType="org.sang.bean.Department" select="org.sang.mapper.DepartmentMapper.getDepByPid" column="id"> </collection> </resultMap> <select id="getDepByPid" resultMap="BaseResultMap"> select d1.*from department d1 where d1.`parentId`=#{pid} AND d1.enabled=true; </select>
每一個Department中都有一個children屬性,getDepByPid方法的返回結果是一個BaseResultMap,BaseResultMap中的collection又將調用getDepByPid方法,通過這種方式我們可以快速實現一個遞歸調用。Mapper中只需要定義如下方法即可:
List<Department> getDepByPid(Long pid);
查詢結果如下(部分):
[ { "id": 1, "name": "股東會", "parentId": -1, "enabled": true, "children": [ { "id": 4, "name": "董事長", "parentId": 1, "enabled": true, "children": [ { "id": 5, "name": "總經理", "parentId": 4, "enabled": true, "children": [ { "id": 8, "name": "財務部", "parentId": 5, "enabled": true, "children": [], "parent": false }], "parent": true } ], "parent": true } ], "parent": true } ]
存儲過程調用比較簡單,以添加部門為例,如下:
1.Mapper中添加如下方法:
void addDep(@Param("dep") Department department);
2.xml中寫法如下:
<select id="addDep" statementType="CALLABLE"> call addDep(#{dep.name,mode=IN,jdbcType=VARCHAR},#{dep.parentId,mode=IN,jdbcType=INTEGER},#{dep.enabled,mode=IN,jdbcType=BOOLEAN},#{dep.result,mode=OUT,jdbcType=INTEGER},#{dep.id,mode=OUT,jdbcType=BIGINT}) </select>
注意statementType調用表示這是一個存儲過程,mode=IN表示這是輸入參數,mode=OUT表示這是輸出參數,調用成功之后,在service中獲取department的id和result字段,就能拿到相應的調用結果了。
看完上述內容,你們掌握怎樣使用MyBatis輕松實現遞歸查詢與存儲過程調用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!
文章標題:怎樣使用MyBatis輕松實現遞歸查詢與存儲過程調用
文章URL:http://vcdvsql.cn/article16/peiggg.html
成都網站建設公司_創新互聯,為您提供服務器托管、網站改版、網頁設計公司、云服務器、做網站、外貿網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯