目录
一、🔥今日目标
二、🎈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); } } } }
这回修改的后端部分代码不是很多也不是很难,所以我不打算在讲文档模块的接口了