网络上写的一堆都不能用的 好吧.. DROP PROCEDURE IF EXISTS dfsSons; CREATE PROCEDURE dfsSons(IN rootid INT) BEGIN DECLARE dep INT; DROP table if exists tmplist; create table tmplist( id int, depth int ); SET dep = 0; insert into tmplist select file_relation_id, dep from file_relation where file_relation_id = rootid; WHILE ROW_COUNT() > 0 DO SET dep = dep+1; insert into tmplist select A.file_relation_id, dep from file_relation as A, tmplist as B where A.parent_id = B.id and B.depth = dep - 1; END WHILE; END$$ CALL dfsSons(7);
需要maven中引入jpa,
本例中实际上不需要返回值,但是mybatis会有返回值,使用void会报错,这里用HashMap兼容了。
使用的注解和查询一样,但是要指定statementType为CALLABLE。 @SuppressWarnings("rawtypes") @Select("call dfsSons(#{rootid})") @Options(statementType= StatementType.CALLABLE ) public HashMap getTableOfDelete(@Param("rootid") int parent_id); @Test public void testDelete() { int parent_id = 7; fileRelationDao.getTableOfDelete(parent_id); List lists = fileRelationDao.selectNeedDeleteId(); System.out.println(lists.size()); }
大公告成...