欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

怎樣使用MyBatis輕松實現(xiàn)遞歸查詢與存儲過程調(diào)用

怎樣使用MyBatis輕松實現(xiàn)遞歸查詢與存儲過程調(diào)用,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

成都創(chuàng)新互聯(lián)公司是一家業(yè)務(wù)范圍包括IDC托管業(yè)務(wù),網(wǎng)絡(luò)空間、主機租用、主機托管,四川、重慶、廣東電信服務(wù)器租用,南充服務(wù)器托管,成都網(wǎng)通服務(wù)器托管,成都服務(wù)器租用,業(yè)務(wù)范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)公司。

遞歸調(diào)用

由于部門的層級不可控,因此如果我想要獲取所有部門的完整json的話,就要采用遞歸調(diào)用,使用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方法的返回結(jié)果是一個BaseResultMap,BaseResultMap中的collection又將調(diào)用getDepByPid方法,通過這種方式我們可以快速實現(xiàn)一個遞歸調(diào)用。Mapper中只需要定義如下方法即可:

List<Department> getDepByPid(Long pid);

查詢結(jié)果如下(部分):

[
    {
        "id": 1,
        "name": "股東會",
        "parentId": -1,
        "enabled": true,
        "children": [
            {
                "id": 4,
                "name": "董事長",
                "parentId": 1,
                "enabled": true,
                "children": [
                    {
                        "id": 5,
                        "name": "總經(jīng)理",
                        "parentId": 4,
                        "enabled": true,
                        "children": [
                            {
                                "id": 8,
                                "name": "財務(wù)部",
                                "parentId": 5,
                                "enabled": true,
                                "children": [],
                                "parent": false
                            }],
                        "parent": true
                    }
                ],
                "parent": true
            }
        ],
        "parent": true
    }
]

存儲過程調(diào)用

存儲過程調(diào)用比較簡單,以添加部門為例,如下:

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)用表示這是一個存儲過程,mode=IN表示這是輸入?yún)?shù),mode=OUT表示這是輸出參數(shù),調(diào)用成功之后,在service中獲取department的id和result字段,就能拿到相應(yīng)的調(diào)用結(jié)果了。

看完上述內(nèi)容,你們掌握怎樣使用MyBatis輕松實現(xiàn)遞歸查詢與存儲過程調(diào)用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章標題:怎樣使用MyBatis輕松實現(xiàn)遞歸查詢與存儲過程調(diào)用
文章URL:http://www.chinadenli.net/article16/peiggg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管網(wǎng)站改版網(wǎng)頁設(shè)計公司云服務(wù)器做網(wǎng)站外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司