分享知识 传递快乐
先建一带输出值的存储过程:
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `getChildIds`(IN `paramId` INT(11), OUT `resultIds` VARCHAR(50))
BEGIN
DECLARE ids CHAR(255) ;
SET ids = cast(paramId AS CHAR);
WHILE ids is not null DO
SET resultIds = IF(resultIds != "", concat(resultIds,',',ids), concat(ids));
SELECT group_concat(id) INTO ids FROM resource where FIND_IN_SET(pid, ids) > 0;
END WHILE;
END//
DELIMITER ;MyBatis操作存储过程
<select id="getChildIds" parameterType="map" statementType="CALLABLE">
call getChildIds(#{paramId, mode=IN, jdbcType=INTEGER}, #{resultIds, mode=OUT, jdbcType=VARCHAR})
</select>Dao层
void getChildIds(Map<String, Object> param);Service层
public void deleteBatchIds(Long paramId) {
Map<String, Object> param = new HashMap<>();
param.put("paramId", paramId);
param.put("resultIds", null);
resourceDao.getChildIds(param);
System.out.println(param.get(resultIds));
}值就存放在了resultIds中。
本文介绍了一个MySQL存储过程的具体实现,该过程用于递归获取资源树中的子节点ID,并通过MyBatis进行调用。文章提供了完整的代码示例,包括存储过程创建、MyBatis配置及Java服务层实现。
2843

被折叠的 条评论
为什么被折叠?



