【wiki知识库】06.文档管理接口的实现--SpringBoot后端部分

目录

一、🔥今日目标

二、🎈SpringBoot部分类的添加

1.调用MybatisGenerator

2.添加DocSaveParam

3.添加DocQueryVo

三、🚆后端新增接口 

3.1添加DocController

3.1.1 /all/{ebokId}

3.1.2  /doc/save

3.1.3 /doc/delete/{idStr}

3.1.4 /doc/find-content/{id}

 2.添加DocService

3.添加DocServiceImpl


一、🔥今日目标

【wiki知识库】06.文档管理页面的添加--前端Vue部分-CSDN博客

这篇文章是06前端部分实现的基础,话不多说了,直接带大家把接口实现完成。

二、🎈SpringBoot部分类的添加

1.调用MybatisGenerator

把图中的代码部分的表的名称改为doc,然后右键运行。

因为文档管理的内容中还要添加文档的具体内容,我们还要生成一下content表。

2.添加DocSaveParam

package com.my.hawiki.param;import lombok.Data;import javax.validation.constraints.NotNull;@Data
public class DocSaveParam {private Long id;@NotNull(message = "【电子书】不能为空")private Long ebookId;@NotNull(message = "【父文档】不能为空")private Long parent;@NotNull(message = "【名称】不能为空")private String name;@NotNull(message = "【顺序】不能为空")private Integer sort;private Integer viewCount;private Integer voteCount;@NotNull(message = "【内容】不能为空")private String content;}

3.添加DocQueryVo

package com.my.hawiki.vo;import lombok.Data;@Data
public class DocQueryVo {private Long id;private Long ebookId;private Long parent;private String name;private Integer sort;private Integer viewCount;private Integer voteCount;}

上边两个部分不用解释了。

三、🚆后端新增接口 

3.1添加DocController

一共有四个接口

3.1.1 /all/{ebokId}

根据传来的ebookId来查询这个电子书下的所有文档。

/*** 查询电子书下的所有doc* @param ebookId 电子书id* @return*/@GetMapping("/all/{ebookId}")public CommonResp all(@PathVariable Long ebookId){List<DocQueryVo> list = docService.all(ebookId);return new CommonResp(true,"查找成功",list);}

3.1.2  /doc/save

保存传来的文档。

 /*** 文档的保存* @param req 文档参数* @return*/@PostMapping("/save")public CommonResp save(@Valid @RequestBody DocSaveParam req) {docService.saveDoc(req);return new CommonResp(true,"添加成功",null);}

3.1.3 /doc/delete/{idStr}

删除传来的树形文档。

 /*** 文档删除   树形结构删除* @param idsStr 删除的文档的ids* @return*/@DeleteMapping("/delete/{idsStr}")public CommonResp delete(@PathVariable String idsStr) {boolean res = docService.removeByIds(Arrays.asList(idsStr.split(",")));String message = Boolean.TRUE.equals(res) ? "删除成功" : "删除失败";return new CommonResp(res,message,null);}

3.1.4 /doc/find-content/{id}

根据conent的id查询content。

/*** 查找某个doc的content内容* @param id content的id* @return*/@GetMapping("/find-content/{id}")public CommonResp findContent(@PathVariable Long id) {Content content = contentService.getById(id);String message = content.getContent();return new CommonResp(true,"查找成功",message);}

大家可以自己把代码添加到DocController中。 

package com.my.hawiki.controller;/*** <p>* 文档 前端控制器* </p>** @author CSDN__哈* @since 2024-05-26*/
@RestController
@RequestMapping("/doc")
public class DocController {@ResourceDocService docService;@ResourceContentService contentService;}

 2.添加DocService

public interface DocService extends IService<Doc> {List<DocQueryVo> all(Long ebookId);void saveDoc(DocSaveParam req);
}

3.添加DocServiceImpl

我并没有做文档的查询功能,没有使用分页查询。下边的保存或更新操作倒是坑到我了,因为你添加一个文档的时候,content也是同样被添加的,所以更新操作我直接进行的content更新,但是我拿到的数据库中有一部分数据是手动添加的,content和docu不对应,所以这里进行了更新判断,如果更新不成功说明就是上边的情况,这时候把content直接插入进去。

package com.my.hawiki.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.my.hawiki.domain.Content;
import com.my.hawiki.domain.Doc;
import com.my.hawiki.mapper.ContentMapper;
import com.my.hawiki.mapper.DocMapper;
import com.my.hawiki.param.DocSaveParam;
import com.my.hawiki.service.DocService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.my.hawiki.utils.CopyUtil;
import com.my.hawiki.vo.DocQueryVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;
import java.util.List;/*** <p>* 文档 服务实现类* </p>** @author CSDN__哈* @since 2024-05-26*/
@Service
public class DocServiceImpl extends ServiceImpl<DocMapper, Doc> implements DocService {@ResourceDocMapper docMapper;@ResourceContentMapper contentMapper;@Overridepublic List<DocQueryVo> all(Long ebookId) {LambdaQueryWrapper<Doc> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(Doc::getEbookId,ebookId).orderByAsc(Doc::getSort);List<Doc> docs = docMapper.selectList(lambdaQueryWrapper);List<DocQueryVo> docQueryVos = CopyUtil.copyList(docs,DocQueryVo.class);return docQueryVos;}@Override@Transactionalpublic void saveDoc(DocSaveParam req) {Doc doc = CopyUtil.copy(req,Doc.class);Content content = CopyUtil.copy(req,Content.class);// 证明是添加操作if(doc.getId()==null){docMapper.insert(doc);content.setId(doc.getId());contentMapper.insert(content);}else{docMapper.updateById(doc);int res = contentMapper.updateById(content);System.out.println(res);System.out.println(content);if(res == 0){contentMapper.insert(content);}}}
}

这回修改的后端部分代码不是很多也不是很难,所以我不打算在讲文档模块的接口了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/27528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习之Transformer模型和大型语言模型(LLMs)

Transformer模型和大型语言模型(LLMs)是现代自然语言处理(NLP)和人工智能(AI)领域的前沿技术。这些模型革新了机器理解和生成人类语言的方式,使得从聊天机器人和自动翻译到复杂的内容生成和情感分析的应用成为可能。 Transformer模型 概述 Transformer模型是现代自然…

vue2 vue3 中指令总结

vue2 vue3 中指令总结 使用方式vue2 指令定义方式钩子的参数指令钩子和组件生命周期的执行顺序是怎样的&#xff1f; vue3 中的指令定义方式hook vs 指令指令钩子函数和组件生命周期的执行顺序 指令和 render 函数指令用在 jsx 上指令和 render 函数一起使用 最佳实践其他问题参…

[Qt] Qt Creator 以及 Qt 在线安装教程

一、Qt Creator 下载及安装 1、从以下镜像源下载安装包常规安装即可 Qt Creator 也可以在第二步Qt 在线安装时一次性勾选安装&#xff0c;见后文 Qt Creator 中科大源下载地址 二、Qt 在线安装 1、根据所在平台选择对应的安装器下载 Qt 在线安装器下载 2、可能的安装报错…

Windows 11部署FunASR离线语音识别系统

Windows 11部署FunASR离线语音识别系统 官网连接 https://github.com/alibaba-damo-academy/FunASR/blob/main/runtime/docs/SDK_advanced_guide_online_zh.md1-安装Docker 运行Docker Desktop Installer.exe安装Docker 2-Windows添加删除程序增加虚拟机和Linux子系统功能 …

云电脑有多好用?适合哪些人使用?

云电脑作为一种新型的计算模式&#xff0c;其应用场景广泛且多样&#xff0c;适合各类人群使用。云电脑适合什么人群使用&#xff1f;云电脑有哪些应用场景&#xff1f;有什么好的云电脑推荐&#xff1f;以下本文将详细探讨云电脑的主要应用场景及其适用人群的相关内容&#xf…

win10下使用docker和VMware

1. 要使用docker的处理 打开 Hyper-V 管理员身份打开提示符。 输入命令bcdedit /set hypervisorlaunchtype auto 重启电脑 2. 要使用vm虚拟机 关闭 Hyper-V 管理员身份打开提示符。 输入 bcdedit 并回车&#xff0c;找到hypervisorlaunchtype选项发现为auto 输入命令bcdedit /s…

C#使用OpenXml读取Word、PPT、Excel文档内容

DocumentFormat.OpenXml是微软官方推出的一个操作Excel、Word、PPT文件的开源组件&#xff0c;因此它是免费的。以下是一些关于DocumentFormat.OpenXml的详细信息&#xff1a; 开源性质&#xff1a;DocumentFormat.OpenXml是一个开源项目&#xff0c;这意味着其源代码是公开的…

JavaScript内置方法 操作数组和字符串

在JavaScript中&#xff0c;数组和字符串是非常常见的数据类型&#xff0c;它们各自有一套强大的内置方法。以下是一些常用的数组和字符串方法&#xff0c;以及它们的实例和注意事项&#xff1a; 数组操作方法&#xff1a; 1. push() / pop() push()&#xff1a;向数组的末尾…

禁用PS/Photoshop等一系列Adobe旗下软件联网外传用户数据操作

方案一&#xff1a; 下载火绒杀毒&#xff0c;在联网请求上禁用Adobe软件的联网请求&#xff0c;甚至还可以额外发现哪些是它要想要偷偷摸摸干的。 方案二&#xff1a; 最后注意&#xff1a; 用盗版软件只是获得了使用权&#xff01;

Docker系列.Docker Desktop中如何启用Kubernetes

Docker技术概论 Docker Desktop中如何启用Kubernetes - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.…

Linux编辑器 vim使用 (解决普通用户无法进行sudo提权问题)

文章目录 一.vim是什么命令模式底行模式 二.关于vim暂停问题三.注释批量化注释批量化去注释 四.解决普通用户无法进行sudo提权问题五.vim的配置 一.vim是什么 用过VS的都知道&#xff0c;拥有着编辑器编译器调试.编写C&#xff0c;C&#xff0c;python等的功能。就是集成 Linu…

骤旱(Flash drought)相关小结

1. 简介 2. 数据集 3. 识别算法 待更新

1606 - 求一个两位数倒序的结果

问题描述 请输出一个两位的整数 n&#xff0c;倒过来的数&#xff0c;也就是输出这个两位数个位和十位颠倒的结果。 比如&#xff1a;整数 23 倒过来是 32&#xff0c;整数 18 倒过来是 81 &#xff0c;整数 20 倒过来是 2。 输入 两位整数 n。 输出 n 倒过来的整数。 样…

LeetCode | 434.字符串中的单词数

这道题直接使用语言内置的 split 函数可直接分离出字符串中的每个单词&#xff0c;但是要注意区分两种情况&#xff1a;1、空串&#xff1b;2、多个空格连续&#xff0c;分割后会出现空字符的情况&#xff0c;应该舍弃 class Solution(object):def countSegments(self, s):&qu…

java算法:选择排序

文章标题 概述与基本实现优缺点尝试优化 概述与基本实现 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。它的基本思想是每次从待排序的元素中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;放置在已排序的部分的末尾&#xff0c;直到…

JAVA系列---函数式接口

函数式接口的定义 一个函数式接口有且仅有一个抽象方法(SAM&#xff0c;single abstract method)。对于接口来说抽象方法必须重写&#xff0c;默认方法可选重新&#xff0c;静态方法不可重新。Object 类中的 public abstract method 不会被视为单一的抽象方法。这些方法对于函…

java技术专家面试指南100问【java学习+面试宝典】(四)

如何避免“伪共享”&#xff1f; 字节填充&#xff08;创建变量时&#xff0c;使用字段对其进行填充&#xff0c;避免多个变量被分派到同一个缓存行里&#xff09;。JDK8提供了一个Contended注解来解决伪共享。 Netty 的应用场景了解么&#xff1f; Netty 主要用来做网络通信…

数据结构学习笔记-树

1.树的存储结构 &#xff08;1&#xff09;双亲表示法 顺序存储结点数据&#xff0c;结点中保存父节点在数组中的下标。 优点&#xff1a;找父节点方便&#xff1b;缺点&#xff1a;找孩子不方便 #define MAX_TREE_SIZE 100 //树中最多结点数 typedef struct{ //树的…

微信小程序点击打开关联企业微信客服

wx.openCustomerServiceChat({extInfo: {url: https://work.weixin.qq.com/kfid/kfc****},corpId: *****,})

磁盘性能概述与磁盘调度算法

目录 1. 磁盘性能概述 1. 数据传输速率 2. 寻道时间 3. 旋转延迟 4. 平均访问时间 2. 早期的磁盘调度算法 1. FIFO&#xff08;First-In-First-Out&#xff09;调度算法 2. SSTF&#xff08;Shortest Seek Time First&#xff09;调度算法 3. SCAN&#xff08;Elevator…