JAVA代码实现(链接):MySql、Oracle(通用方法)递归查询生成文件目录树(JAVA实现 递归过程中不访问数据库,递归之前只访问两次 进行递归前数据准备)
以下是XML中实现文件树的查询、递归
场景:根据交易编码,查询文件树
文件、文件夹都存放TRADER_INFO_FILE表中
实体类
public class TradeInfoFile {
// 文件编码(子)
private String fileCode;
// 所属文件编码(父)
private String belongFileCode;
// 交易信息编码
private String finTradeCode;
// 是否是文件夹
private Boolean isDirFlag;
//最后修改时间
private Date lastModifyTime;
/*
children属性不与数据库中TRADER_INFO_FILE标建立映射关系
*/
[email protected] // import javax.persistence.Transient;
private Listchildren;
//省略set/get方法.......................
// 创建文件根节点
public static TradeInfoFile createRoot(ListfileTree) {
TradeInfoFile root = new TradeInfoFile();
root.setFileCode("-1");
root.setBelongFileCode("根节点");
root.setChildren(fileTree);
return root;
}
}
Controller层
@RestController
@RequestMapping("/trade-file")
public class TradeInfoController {
[email protected]
private TradeInfoService tradeInfoService;
// 查询文件树,一个交易信息编码可以对应多个文件和文件夹
[email protected](value = "/{id}/file-tree") // 交易信息编码
public TradeInfoFile getFileTree(@RequestParam(name = "id") String finTradeCode) {
TradeInfoFile entity = new TradeInfoFile();
entity.setFinTradeCode(finTradeCode);
return tradeInfoService.getFileTree(entity);
}
}
Service层
public interface TradeInfoService {
public TradeInfoFile getFileTree(TradeInfoFile entity);
}
@Service
public class TradeInfoFileServiceImpl implements TradeInfoService{
[email protected]
private TradeInfoFileMapper tradeInfoFileMapper;
[email protected]
// 查询目录树
public TradeInfoFile getFileTree(TradeInfoFile entity) {
ListfileTree = tradeInfoFileMapper.getFileTree(entity);
return TradeInfoFile.createRoot(fileTree);
}
mapper
public interface TradeInfoFileMapper {
public ListgetFileTree(TradeInfoFile entity);
}
xml文件
SELECT FILE_CODE,BELONG_FILE_CODE,FIN_TRADE_CODE,IS_DIR_FLAG,LAST_MODIFY_TIME,AVAILAB_FLAG
FROM TRADE_INFO_FILE
WHERE FIN_TRADE_CODE = #{ finTradeCode }
AND BELONG_FILE_CODE = '0'
AND AVAILAB_FLAG = TRUE
ORDER BY IS_DIR_FLAG DESC,LAST_MODIFY_TIME DESC
SELECT FILE_CODE,BELONG_FILE_CODE,FIN_TRADE_CODE,IS_DIR_FLAG,LAST_MODIFY_TIME,AVAILAB_FLAG
FROM TRADE_INFO_FILE
WHERE FIN_TRADE_CODE = #{ finTradeCode }
AND BELONG_FILE_CODE = #{ fileCode }
AND AVAILAB_FLAG = TRUE
ORDER BY IS_DIR_FLAG DESC,LAST_MODIFY_TIME DESC
XML流程图大致如下