【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 {

    @Resource
    DocService docService;

    @Resource
    ContentService 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 {
    @Resource
    DocMapper docMapper;
    @Resource
    ContentMapper contentMapper;

    @Override
    public 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
    @Transactional
    public 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.mfbz.cn/a/699465.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“盒装”床垫在美国全面爆发,沃尔玛电商正革新传统床上用品行业

​​“盒装”床垫在美国市场的全面普及以及沃尔玛电商对传统床上用品行业的创新&#xff0c;正引领着家居市场的变革潮流。这两个趋势不仅改变了消费者的购物方式&#xff0c;也为整个行业带来了新的发展机遇。 盒装床垫的兴起为消费者带来便捷灵活的购物体验。采用先进压缩技术…

网络流常用示意图及基本概念

【网络流简介】 ● 网络流基本概念网络&#xff1a;网络是一个有向有权图&#xff0c;包含一个源点和一个汇点&#xff0c;没有反平行边。网络流&#xff1a;是定义在网络边集上的一个非负函数&#xff0c;表示边上的流量。网络最大流&#xff1a;在满足容量约束和流量守恒的前…

机器学习-支持向量机

目录 一支持向量机 1.支持向量机SVM 2构建svm目标函数 3.拉格朗日乘法&#xff0c;kkt条件 拉格朗日乘法&#xff1a; kkt条件 对偶问题 4.最小化SVM目标函数 kkt条件&#xff1a; 对偶转换&#xff1a; 5软间隔及优化 优化svm目标函数 构造拉格朗日函数 对偶转换关系…

快手可灵AI开始内测,对标Sora?免费体验!

最近&#xff0c;国内第一个可以和 Sora 相媲美的 AI 视频生成模型&#xff0c;快手的可灵大模型&#xff08;Kling&#xff09;开始免费内测。 在快手旗下的快影App&#xff0c;就可以申请。 别忘记填写表格信息&#xff0c;可以加快你的申请通过&#xff0c;链接我放在这里…

超详解——Python 序列详解——基础篇

目录 1. 序列的概念 字符串&#xff08;String&#xff09; 列表&#xff08;List&#xff09; 元组&#xff08;Tuple&#xff09; 2. 标准类型操作符 连接操作符&#xff08;&#xff09; 重复操作符&#xff08;*&#xff09; 索引操作符&#xff08;[]&#xff09; …

Ubuntu18.04 文件管理器无法打开的解决方法

问题&#xff1a;打开Ubuntu虚拟机发现文件管理器无法打开,一直在转圈圈 在终端中输入 nautilus 显示如下信息 nautilus: symbol lookup error: /usr/lib/x86_64-linux-gnu/tracker-2.0/libtracker-data.so.0: undefined symbol: sqlite3_bind_pointer 解决措施&#xff1a…

linux安装anconda后,之前的python环境如何加载到anconda环境中

一、问题描述 由于某种原因&#xff0c;我们需要在系统中安装多个环境&#xff0c;我们自然想到安装anconda来解决这个问题。但是当我们安装好anconda后&#xff0c;发现我们未安装anconda之前的python环境使用不了了。那么我们如何将之前的python环境放到conda 环境中呢。 二…

“CEO在左,IP在右”企业家直播浪潮来了?

“在未来&#xff0c;每个人都可能成名15分钟。” 这句15分钟定律&#xff0c;虽然是美国波普艺术之父安迪沃霍尔在五十年前提出&#xff0c;但把它放在自媒体媒介兴起的当下同样适用。如今世界&#xff0c;成名15分钟足以给任何一个人或平台带来“泼天的富贵”。 而对于电商…

Docker 基础使用(5)Compose

文章目录 Docker Compose 基础认识Docker Compose 基础语法Docker Compose 基础指令Docker Compose 使用实例 Docker 基础使用(0&#xff09;基础认识 Docker 基础使用(1&#xff09;使用流程概览 Docker 基础使用(2&#xff09;镜像与容器 Docker 基础使用(3&#xff09;存储卷…

2024中国海洋装备展暨航海装备大会(福州海峡国际会展中心)

关于邀请参加2024中国海洋装备博览会的函 为加快推动海洋强国建设。在福建省人民政府的大力支持下,第二届中国海洋装备博览会将于2024年11月15-18日在福州举办。 博览会将进一步聚焦产业链和供应链协同创新&#xff0c;着力推动现代海洋产业体系建设&#xff0c;促进海洋科技…

Git保姆级教程

目录 Git是什么&#xff0c;为什么要学这个工具&#xff1f; 码云注册并创建仓库 Git安装 查看本地仓库状态 添加到暂存区 提交到本地库 修改文件 版本回退 创建、切换和删除分支 合并分支 克隆远端库到本地 将本地库推送到远端库 命令设置别名 Git是什么&#xf…

人工智能在【多模态:多组学+复发转移+肿瘤起源】的最新研究进展|顶刊速递·2024-06-11

小罗碎碎念 本期文献速递的主题是——人工智能多模态/多组学肿瘤的复发转移肿瘤起源。 今天的六篇文章比较特殊&#xff0c;大家要好好留心一下&#xff0c;因为选题是老板亲自下场定的&#xff0c;机会难得。 最近状态不太好&#xff0c;这周还要在北京待几天处理些事情&#…

算法day25

第一题 394. 字符串解码 解法&#xff1a;模拟栈的完成上述的操作&#xff1b; 分析&#xff1a; 下面以如图的字符串来分析&#xff1b; 首先定义一个数字栈用来存放数字&#xff0c;同时定义一个容器stringbuffer栈&#xff0c;里面用来存放字符串&#xff1b; 1、遇到数字&…

【总线】AMBA总线架构的发展历程

目录 引言 发展历程 第一代AMBA&#xff08;AMBA 1&#xff09; 第二代AMBA&#xff08;AMBA 2&#xff09; 第三代AMBA&#xff08;AMBA 3&#xff09; 第四代AMBA&#xff08;AMBA 4&#xff09; 第五代AMBA&#xff08;AMBA 5&#xff09; AMBA协议简介 ASB&#x…

VRRP多备份组(华为)

#交换设备 VRRP多备份组 当 VRRP 配置为单备份组时&#xff0c;业务全部由 Master 设备承担&#xff0c;而 Backup 设备完全处于空闲状态&#xff0c;没有得到充分利用。VRRP 可以通过配置多备份组来实现负载分担&#xff0c;有效地解决了这一问题。 VRRP 允许同一台设备的…

排序方法——《快速排序》

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

10、系统安全及应用

1、账号安全 用户的账号是计算机使用者的身份凭证或标识&#xff0c;每个要访问系统资源的人&#xff0c;必须凭借其用户账号才能进入计算机。 1.1 系统账号清理 在Linux系统中&#xff0c;除了用户手动创建的各种账号之外&#xff0c;还包括随系统或程序安装过程而生成的其…

Java版本+企业电子招投标系统源代码+支持二开+Spring cloud +鸿鹄电子招投标系统

随着公司的迅速扩张&#xff0c;对内部采购管理的要求也随之提高。为了构建一个公平、透明、公正的采购体系&#xff0c;并有效降低采购成本&#xff0c;我们决定开发一款符合国家电子招投标法规的电子招标采购软件。该软件将提升招投标工作的公开性和透明度&#xff0c;通过电…

macOS Sequoia 开发者测试版下载和安装教程

macOS Sequoia 于 2024年6月10日在WWDC 2024 上发布&#xff0c;里面添加了AI、窗口排列、操控iPhone等功能&#xff0c;目前发布的为测试版本&#xff0c;可能很多人不知道怎么去下载安装&#xff0c;现在小编教一下大家怎么安装最新的 macOS Sequoia 开发者测试版。 下载 mac…

Qt系统相关

本文目录 1.Qt事件事件的处理标签事件鼠标事件滚轮事件按键事件定时器事件窗口事件事件派发器 2.Qt文件操作QFile的基本使用 3.Qt多线程使用线程线程锁connect的第五个参数 条件变量和信号量 4.Qt网络编程UDP SocketTCP SocketQTcpServerQTcpSocket HTTP的编写 5.QT多媒体播放音…