文章评论评论-功能实现
1 文章评论功能开发
1.1 表结构分析
集合结构:
专栏文章评论 | comment | ||
---|---|---|---|
字段名称 | 字段含义 | 字段类型 | 备注 |
_id | ID | 文本 | |
articleid | 文章ID | 文本 | |
content | 评论内容 | 文本 | |
userid | 评论人ID | 文本 | |
parentid | 评论ID | 文本 | 如果为0表示文章的顶级评论 |
publishdate | 评论日期 | 日期 |
1.2 功能实现-新增评论
- 修改tensquare_article工程的pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐data‐mongodb</artifactId> </dependency>
- 修改application.yml ,在spring节点下新增配置
data: mongodb: host: 192.168.184.134 database: articleComment
- 创建实体类
/** * 文章评论 * * @author ChenZiMing * @created 2018-12-01-15:58. */ @Data public class Comment implements Serializable { @Id private String _id; private String articleid; private String content; private String userid; private String parentid; private Date publishdate; }
- 创建数据访问接口
这里注意是继承MongoRepository<Comment,String>
/** * 数据访问接口 * @author Administrator */ public interface CommentDao extends MongoRepository<Comment,String> { { }
- 创建业务逻辑类
/** * 服务层 * @author Administrator */ @Service @Transactional public class CommentService { @Autowired private CommentDao commentDao; @Autowired private IdWorker idWorker; public void add(Comment comment) { comment.set_id(idWorker.nextId() + ""); commentDao.save(comment); } }
- 创建控制器类
/** * 控制器层 * @author Administrator */ @RestController @CrossOrigin @RequestMapping("/comment") public class CommentController { @Autowired private CommentService commentService; @PostMapping public Result save(@RequestBody Comment comment){ commentService.add(comment); return new Result(true, StatusCode.OK, "提交成功"); } }
- 我觉得上面的代码写的没有关联,查找别人代码后写的增加文章评论,代码如下
主要就是理解,comment和spit一样,都是在MongoDB中保存的。
ArticleController增加方法
ArticleService增加方法/** * 文章加评论 * @param articleId * @param comment * @return */ @PostMapping("/comment/{articleId}") public Result addComment(@PathVariable String articleId, @RequestBody Comment comment) { articleService.addComment(articleId, comment); return new Result(true, StatusCode.OK, "评论成功"); }
/** * 增加评论 * * @param articleId * @param comment */ public void addComment(String articleId, Comment comment) { comment.setArticleid(articleId); comment.set_id(idWorker.nextId() + ""); comment.setPublishdate(new Date()); Article article = this.findById(articleId); commentDao.save(comment); //判断哪些是吐槽的评论 String parentid = comment.getParentid(); if (!StringUtils.isEmpty(parentid)) { //更新该评论对应的吐槽的回复数+1 //1.创建查询对象 Query query = new Query(); query.addCriteria(Criteria.where("_id").is(parentid)); //2.创建修改对象 Update update = new Update(); update.inc("comment", 1); mongoTemplate.updateFirst(query, update, "comment"); } }
1.2 功能实现-根据文章ID查询评论列表
- CommentDao新增方法定义
/** * 根据文章ID查询评论列表 * @param articleid * @return */ public List<Comment> findByArticleId(String articleid);
- CommentService新增方法
public List<Comment> findByArticleId(String articleid){ return commentDao.findByArticleId(articleid); }
- CommentController新增方法
@GetMapping(value="/article/{articleid}") public Result findByArticleid(@PathVariable String articleid){ return new Result(true, StatusCode.OK, "查询成功",commentService.findByArticleid(articleid)); }
1.3 功能实现-删除评论
删除的逻辑:吐槽的评论数减一还是文章的评论数数减一,讲课中没有说,暂时这么理解。
- ArticleService
/** * 删除评论 * @param articleId * @param commentId */ public void delComment(String articleId, String commentId) { commentDao.deleteById(commentId); Article article = articleDao.findById(articleId).get(); //文章评论数减一 article.setComment(article.getComment() - 1); }
- ArticleController
/** * 文章删除评论 * @param articleId * @param commentId * @return */ @DeleteMapping("/comment/{articleId}/{commentId}") public Result delComment(@PathVariable String articleId, @PathVariable String commentId) { articleService.delComment(articleId, commentId); return new Result(true, StatusCode.OK, "删除成功"); }
十次方00、总目录
https://mp.csdn.net/postedit/84260613