首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 預存程序與 iBatis 整合實戰:遞迴查詢樹形選單路徑

     編輯:DB2 教學

業務場景

既有樹形選單結構,每節點擁有 ID 與父 ID (PID)。給定任一節點 ID,需回傳從根節點到該節點的完整路徑 (如「系統管理 > 使用者管理 > 角色配置」)。

預存程序實作 (SQL PL)

CREATE PROCEDURE SCOTT.CMODM_FUNPATH(
  IN  FUNID   INTEGER,
  IN  LINK    VARCHAR(10),
  OUT FUNPATH VARCHAR(200)
)
SPECIFIC SQL071108112056000
READS SQL DATA
NOT DETERMINISTIC
NULL CALL
LANGUAGE SQL
BEGIN
  DECLARE curName VARCHAR(30);
  DECLARE curFunId INTEGER;
  SET FUNPATH = '';
  SET curFunId = FUNID;
  WHILE (curFunId != 0) DO
    SELECT pid, name INTO curFunId, curName
    FROM scott.cmodm_function WHERE id = curFunId;
    IF (FUNPATH = '') THEN
      SET FUNPATH = curName;
    ELSE
      SET FUNPATH = curName || LINK || FUNPATH;
    END IF;
  END WHILE;
END

iBatis 映射與呼叫

<parameterMap id="funPathMap" class="map">
  <parameter property="FUNID" jdbcType="INTEGER" javaType="int" mode="IN"/>
  <parameter property="LINK" jdbcType="VARCHAR" javaType="String" mode="IN"/>
  <parameter property="FUNPATH" jdbcType="VARCHAR" javaType="String" mode="OUT"/>
</parameterMap>

<procedure id="selectFunPath" parameterMap="funPathMap">
  {call scott.cmodm_funpath(?,?,?)}
</procedure>
// Java 呼叫
SqlMapClient sqlMap = getSqlMapClient();
Map param = new HashMap<>();
param.put("FUNID", funId);
param.put("LINK", " > ");
param.put("FUNPATH", "");
sqlMap.queryForObject("selectFunPath", param);
String path = (String) param.get("FUNPATH");

設計亮點

  • 遞迴邏輯下推至資料庫層,減少應用與資料庫往返。
  • OUT 參數直接回傳組裝完成路徑,應用層零處理。
  • iBatis parameterMap 精確映射 IN/OUT 模式,型別安全。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved