mybatis递归查询mysql_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标建立映射关系

*/

[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流程图大致如下

4f5c84d40fc76d7ee4b4fad31fc3e473.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值