中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

怎樣使用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

响水县| 淮阳县| 涿鹿县| 阿瓦提县| 葫芦岛市| 会宁县| 离岛区| 宁夏| 恩施市| 宝丰县| 汝南县| 嫩江县| 辽源市| 渭南市| 广德县| 疏附县| 永丰县| 定州市| 泗阳县| 枣强县| 社旗县| 永平县| 寻甸| 扬州市| 夏邑县| 八宿县| 焉耆| 五原县| 邢台县| 尚义县| 刚察县| 左贡县| 稻城县| 云霄县| 招远市| 周口市| 无锡市| 威宁| 湄潭县| 玉环县| 越西县|