分享知识 传递快乐
先建一带输出值的存储过程:
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中。