目录数据库设计

ftp上传文件时,想上传到book_id = 1 and directory_id = 9 的目录下面,

目录结构应该为

1/9/

天官赐福/第四卷/

 //得到绝对地址public ServerResponse<String> getAbsoluteAddress(Integer bookId,Integer directoryId){List<BookDirectory> bookDirectoryList = Lists.newArrayList();BookDirectory bookDirectory = bookDirectoryMapper.getDirByBookIdAndDirectoryId(bookId,directoryId);if(bookDirectory == null){return ServerResponse.createByErrorMessage("参数错误");}bookDirectoryList = getParentById(bookDirectoryList,bookId,bookDirectory.getDirectoryId());String absoluteAddressStr = "";for(int i = bookDirectoryList.size()-1;i >= 0;i--){BookDirectory bookDirectoryItem = bookDirectoryList.get(i);absoluteAddressStr+=(bookDirectoryItem.getDirectoryName()+"/");}return ServerResponse.createBySucess(absoluteAddressStr);}/*** 递归得到当前目录的父目录,将当前目录的parentId当做下次查找的directoryId* @param bookDirectoryList* @param bookId* @Param directoryId* @return*/private List<BookDirectory> getParentById(List<BookDirectory> bookDirectoryList, Integer bookId,Integer directoryId){BookDirectory  bookDirectory = bookDirectoryMapper.getDirByBookIdAndDirectoryId(bookId,directoryId);if(bookDirectory == null){return bookDirectoryList;}else {bookDirectoryList.add(bookDirectory);getParentById(bookDirectoryList,bookId,bookDirectory.getParentId());return bookDirectoryList;}}

测试

 @Testpublic void getAbsoluteAddress(){ServerResponse response = iBookDirectoryService.getAbsoluteAddress(1,9);if(response.isSuccess()){System.out.println(response.getData());}}

得到整体目录结构

/*** ---A*    --a*    --b*    --c* ---B*    --a*    --b* ---C* @return*//*** 得到目录并按照parentId排序* @param bookId* @return*/public ServerResponse<List<BookDirectory>> getBookDir(Integer bookId){if(bookId == null){return ServerResponse.createByErrorMessage("参数错误");}BookDirectory bookDirectory = bookDirectoryMapper.getDirRootByBookId(bookId);if(bookDirectory == null){return ServerResponse.createByErrorMessage("目录为空");}List<BookDirectory> resultBookDirList = Lists.newArrayList();//重新排序resultBookDirList.add(bookDirectory);List<BookDirectory> bookDirectoryListItem = bookDirectoryMapper.getDirByBookIdAndParentId(bookId,bookDirectory.getDirectoryId());for(BookDirectory bookDirectoryItem:bookDirectoryListItem){resultBookDirList.add(bookDirectoryItem);resultBookDirList.addAll(sortDir(Lists.newArrayList(),bookDirectoryItem));}if(CollectionUtils.isEmpty(resultBookDirList)){return ServerResponse.createByErrorMessage("目录错误或该书籍暂无内容");}return ServerResponse.createBySucess(resultBookDirList);}/*** 递归,得到目录并排序,把当前的directoryId作为下次查找的parentId* @param bookDirectoryList* @param bookDirectory* @return*/private List<BookDirectory> sortDir(List<BookDirectory> bookDirectoryList,BookDirectory bookDirectory){//递归结束条件:以bookDirectory.getDirectoryId()作为parentId查询,结果为空,即结束List<BookDirectory> bookDirectoryListOld = bookDirectoryMapper.getDirByBookIdAndParentId(bookDirectory.getBookId(),bookDirectory.getDirectoryId());if(CollectionUtils.isEmpty(bookDirectoryListOld)){return bookDirectoryList;}else {for(BookDirectory bookDirectoryItem:bookDirectoryListOld){bookDirectoryList.add(bookDirectoryItem);sortDir(bookDirectoryList,bookDirectoryItem);}return bookDirectoryList;}}

测试

 @Testpublic void getBookDir() {ServerResponse<List<BookDirectory>> response = iBookDirectoryService.getBookDir(1);if(response.isSuccess()){List<BookDirectory> bookDirectoryList = response.getData();for(BookDirectory bookDirectory:bookDirectoryList){System.out.println(bookDirectory.getDirectoryName());}}}

书籍目录设计,递归案例,得到目录地址,得到目录整体结构相关推荐

  1. Vue.js 源码目录设计(二)

    Vue.js 的源码都在 src 目录下,其目录结构如下. src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms # 不同平台的支持 ├── se ...

  2. 设计一个shell程序,在/userdata目录下建立50个目录,并对每个目录给754权限!

    设计一个Shell程序,在/userdata目录下建立50个目录,即user1-user50,并设置每个目录的权限,其中其他用户的权限为:读:文件所有者的权限为:读.写.执行:文件所有者所在组的权限为 ...

  3. Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略

    Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...

  4. Java 目录操作一(递归创建目录、删除目录、判断目录是否为空、判断文件是否隐藏、获取目录大小、在指定目录中查找文件)

    递归创建目录 import java.io.File;public class Main {public static void main(String[] args) {String directo ...

  5. java基础—采用递归的方式来获取相关目录下的子目录的名称

    采用递归的方式来获取相关目录下的子目录的名称 import java.io.File;//采用递归的方式来获取D盘下myjava目录下的所有子目录的名称 public class FileListDe ...

  6. matlab 30案例 目录,MATLAB-智能算法30个案例分析-终极版(带目录).doc

    MATLAB-智能算法30个案例分析-终极版(带目录) MATLAB 智能算法30个案例分析(终极版) 1?基于遗传算法的TSP算法(王辉)? 2?基于遗传算法和非线性规划的函数寻优算法(史峰)? 3 ...

  7. vue assets图片_Vue实战—如何细化Vue项目目录设计(2)

    通过上一篇文章我们了解了Vue项目核心文件(src)以及在内的各个文件的职能. 接下来我们进一步细化Vue项目的目录设计: 在开发项目的时候前端避免不了请求后端接口.为了同时开发,我们知道的通常会用到 ...

  8. java bean目录_树形目录的递归实现数据库+jsp+javabean

    树形目录的递归实现(一)数据库+jsp+javabean class cn {//连接数据库,这里以MS-SQL为例 String jdbcDriver="com.microsoft.jdb ...

  9. Docker常用命令(启动、镜像相关、容器相关、文件拷贝、目录挂载、查看容器IP地址、Docker备份与恢复)

    0.设置Docker镜像加速器 详见文章:Docker设置ustc的镜像源(镜像加速器) 1.Docker的启动与停止 注: systemctl 命令是系统服务管理器指令. (1)启动docker(守 ...

  10. 分享Qt多工程多目录的编译案例,subdirs

    写这篇文章的目的是为了让Qt像VC++那样,支持一个工程包含多个项目.即1个App+多个动态库.本案例以1个App+1个共享库为例: 工程源码我已上传Qt多工程多目录的编译案例_qt子项目编译顺序-C ...

最新文章

  1. Oracle undo表空间
  2. optee的Share Memory介绍
  3. python with方法
  4. Git根据commitId查看提交内容:根据commitId查看某次提交的内容
  5. 请求发送者与接收者解耦——命令模式
  6. 前端学习(2154):webpack横幅plugin的使用
  7. 数据结构基础(12) --双向循环链表的设计与实现
  8. java方法的重载 编程题,java面试编程题:重载方法
  9. 新产品Wyn Enterprise 详解,立即预约公开课
  10. C++的 RTTI 观念和用途
  11. BIM技术之Dynamo图元编程:柱、球面坐标系节点绘制螺旋线
  12. [从头读历史] 第263节 左传 [BC537至BC479]
  13. 【散文】 漫步在春天
  14. web前端开发的6个福利网站
  15. 在线 excel 产品技术调研
  16. “梧桐杯”中国移动大数据应用创新大赛 - 智慧金融赛道Baseline
  17. 用链接法实现散列表构造和查找
  18. 趣写算法之匈牙利算法
  19. 明日之后mumu模拟器找不到服务器,MuMu模拟器玩明日之后常见问题汇总
  20. “科林明伦杯”哈尔滨理工大学第十届程序设计竞赛题解 H

热门文章

  1. 利用腾讯云服务器 FRP实现网络穿透 在本地搭建魔兽服务器
  2. php 负数装正,负数转正数_php怎么把负数转正数
  3. ppt怎么设置结束时播放音乐
  4. R语言空间数据分析学习笔记1——读取矢量数据并可视化
  5. 向日葵win10远程linux主机,win10系统使用向日葵远程桌面软件远程的修复办法
  6. SpringMvc 异常处理器
  7. 2019北航培训个人项目
  8. sqlserver management studio 2014 升级2016_Android Jetpack重磅升级!新的类库以及现有类库重大更新!
  9. 啥牌子的蓝牙耳机好用不贵?超帅的蓝牙耳机推荐
  10. EOF、EOT 简单介绍