91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣使用MyBatis輕松實現遞歸查詢與存儲過程調用

發布時間:2021-11-10 11:02:57 來源:億速云 閱讀:229 作者:柒染 欄目:大數據

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

遞歸調用

由于部門的層級不可控,因此如果我想要獲取所有部門的完整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輕松實現遞歸查詢與存儲過程調用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

襄汾县| 绥阳县| 井研县| 博爱县| 通山县| 全南县| 故城县| 德昌县| 潞西市| 岑溪市| 广水市| 涿州市| 垫江县| 左云县| 德格县| 武乡县| 桐柏县| 兴业县| 天峻县| 辽源市| 嵊州市| 田阳县| 洪江市| 岳普湖县| 溧水县| 苍南县| 耒阳市| 鄢陵县| 雷山县| 延川县| 弥渡县| 昌江| 中卫市| 武胜县| 阳信县| 明溪县| 秀山| 济宁市| 松潘县| 大宁县| 衡阳市|