当前位置: 首页 > news >正文

【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.lryc.cn/news/369711.html

相关文章:

  • c,c++,go语言字符串的演进
  • vue-cli 快速入门
  • 机器人--矩阵运算
  • 期末复习【汇总】
  • 【IM即时通讯】MQTT协议的详解(3)- CONNACK Packet
  • Linux - 深入理解/proc虚拟文件系统:从基础到高级
  • Django DeleteView视图
  • 代码杂谈 之 pyspark如何做相似度计算
  • 混剪素材哪里找?分享8个热门素材网站
  • 临床应用的深度学习在视网膜疾病的诊断和转诊中的应用| 文献速递-视觉通用模型与疾病诊断
  • 中继器简介
  • websocket 前端项目js示例
  • webapi跨越问题
  • 你知道 npmrc 文档吗? ---- npmrc 关键作用介绍
  • 发现 Laravel 中的 api 响应时间明显过长
  • 如何在MySQL中创建不同的索引和用途?
  • maxwell同步mysql到kafka(一个服务器启动多个)
  • 实用软件分享---简单菜谱 0.3版本 几千种美食(安卓)
  • 网络学习(14)|RESTful API设计:构建优雅的Web服务
  • 【开源】APIJSON 框架
  • R语言探索与分析18-基于时间序列的汇率预测
  • 30岁迷茫?AI赛道,人生新起点
  • 开门预警系统技术规范(简化版)
  • Django与MySQL:配置数据库的详细步骤
  • GPT-4o short description
  • MATLAB 矩阵
  • LED灯的功率以及好的品牌推荐
  • Linux “ 软件管理 “
  • 【uni-app】申请高德地图key,封装map.js,实现H5、iOS、Android通过getlocation获取地图定位信息
  • 使用rufus做Kali Linux时持久分区大小如何设置