怎樣使用MyBatis輕松實(shí)現(xiàn)遞歸查詢與存儲(chǔ)過程調(diào)用,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
成都創(chuàng)新互聯(lián)公司是一家業(yè)務(wù)范圍包括IDC托管業(yè)務(wù),網(wǎng)絡(luò)空間、主機(jī)租用、主機(jī)托管,四川、重慶、廣東電信服務(wù)器租用,南充服務(wù)器托管,成都網(wǎng)通服務(wù)器托管,成都服務(wù)器租用,業(yè)務(wù)范圍遍及中國(guó)大陸、港澳臺(tái)以及歐美等多個(gè)國(guó)家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)公司。
由于部門的層級(jí)不可控,因此如果我想要獲取所有部門的完整json的話,就要采用遞歸調(diào)用,使用Java代碼處理遞歸有點(diǎn)low,剛好MyBatis的ResultMap中的collection可以很方便的解決這個(gè)問題,核心代碼如下:
<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>
每一個(gè)Department中都有一個(gè)children屬性,getDepByPid方法的返回結(jié)果是一個(gè)BaseResultMap,BaseResultMap中的collection又將調(diào)用getDepByPid方法,通過這種方式我們可以快速實(shí)現(xiàn)一個(gè)遞歸調(diào)用。Mapper中只需要定義如下方法即可:
List<Department> getDepByPid(Long pid);
查詢結(jié)果如下(部分):
[ { "id": 1, "name": "股東會(huì)", "parentId": -1, "enabled": true, "children": [ { "id": 4, "name": "董事長(zhǎng)", "parentId": 1, "enabled": true, "children": [ { "id": 5, "name": "總經(jīng)理", "parentId": 4, "enabled": true, "children": [ { "id": 8, "name": "財(cái)務(wù)部", "parentId": 5, "enabled": true, "children": [], "parent": false }], "parent": true } ], "parent": true } ], "parent": true } ]
存儲(chǔ)過程調(diào)用比較簡(jiǎn)單,以添加部門為例,如下:
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調(diào)用表示這是一個(gè)存儲(chǔ)過程,mode=IN表示這是輸入?yún)?shù),mode=OUT表示這是輸出參數(shù),調(diào)用成功之后,在service中獲取department的id和result字段,就能拿到相應(yīng)的調(diào)用結(jié)果了。
看完上述內(nèi)容,你們掌握怎樣使用MyBatis輕松實(shí)現(xiàn)遞歸查詢與存儲(chǔ)過程調(diào)用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
文章標(biāo)題:怎樣使用MyBatis輕松實(shí)現(xiàn)遞歸查詢與存儲(chǔ)過程調(diào)用
文章URL:http://aaarwkj.com/article16/peiggg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站改版、網(wǎng)頁(yè)設(shè)計(jì)公司、云服務(wù)器、做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)