MyBatis自身集合嵌套,递归查询目录树(适用于MySQL、ORACLE等数据库,数据只存放在一个表结构中,递归代码都写在XML中,通过SQL完成)

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标建立映射关系
    */
    @Transient // import javax.persistence.Transient;
    private List children;
    //省略set/get方法.......................
    
    // 创建文件根节点
    public static TradeInfoFile createRoot(List fileTree) {
      TradeInfoFile root = new TradeInfoFile();
      root.setFileCode("-1");
      root.setBelongFileCode("根节点");
      root.setChildren(fileTree);
      return root;
    }
}

Controller层

@RestController
@RequestMapping("/trade-file")
public class TradeInfoController {
​
    @Autowired
    private TradeInfoService tradeInfoService;
    
    // 查询文件树,一个交易信息编码可以对应多个文件和文件夹
    @GetMapping(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{
​
    @Autowired
    private TradeInfoFileMapper tradeInfoFileMapper;
    
    @Override
    // 查询目录树
    public TradeInfoFile getFileTree(TradeInfoFile entity) {
         List fileTree = tradeInfoFileMapper.getFileTree(entity);
         return TradeInfoFile.createRoot(fileTree);
    }

mapper

public interface TradeInfoFileMapper {
    public List getFileTree(TradeInfoFile entity);
}

xml文件

  
    
    
    
    
    
    
    
  
  
    
    
    
    
    
    
    
  
  
  

 

XML流程图大致如下

MyBatis自身集合嵌套,递归查询目录树(适用于MySQL、ORACLE等数据库,数据只存放在一个表结构中,递归代码都写在XML中,通过SQL完成)_第1张图片

 

 

 

 

 

 

 

你可能感兴趣的:(MyBatis自身集合嵌套,递归查询目录树(适用于MySQL、ORACLE等数据库,数据只存放在一个表结构中,递归代码都写在XML中,通过SQL完成))