十次方11、文章评论-业务代码编写

文章评论评论-功能实现

1 文章评论功能开发

1.1 表结构分析

集合结构:

专栏文章评论comment
字段名称字段含义字段类型备注
_idID文本
articleid文章ID文本
content评论内容文本
userid评论人ID文本
parentid评论ID文本如果为0表示文章的顶级评论
publishdate评论日期日期

1.2 功能实现-新增评论

  1. 修改tensquare_article工程的pom.xml
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring‐boot‐starter‐data‐mongodb</artifactId>
    </dependency>
    
  2. 修改application.yml ,在spring节点下新增配置
    data:
    	mongodb:
    		host: 192.168.184.134
    		database: articleComment
    
  3. 创建实体类
    /**
     * 文章评论
     *
     * @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;
    }
    
  4. 创建数据访问接口
    这里注意是继承MongoRepository<Comment,String>
    /**
     * 数据访问接口
     * @author Administrator
     */
    public interface CommentDao extends MongoRepository<Comment,String> { {
    }
    
  5. 创建业务逻辑类
    /**
     * 服务层
     * @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);
        }
    }
    
  6. 创建控制器类
    /**
     * 控制器层
     * @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, "提交成功");
        }
    }
    
  7. 我觉得上面的代码写的没有关联,查找别人代码后写的增加文章评论,代码如下
    主要就是理解,comment和spit一样,都是在MongoDB中保存的。
    ArticleController增加方法
        /**
         * 文章加评论
         * @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, "评论成功");
        }
    
    ArticleService增加方法
        /**
         * 增加评论
         *
         * @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查询评论列表

  1. CommentDao新增方法定义
    /**
    * 根据文章ID查询评论列表
    * @param articleid
    * @return
    */
    public List<Comment> findByArticleId(String articleid);
    
  2. CommentService新增方法
    public List<Comment> findByArticleId(String articleid){
    	return commentDao.findByArticleId(articleid);
    }
    
  3. CommentController新增方法
    @GetMapping(value="/article/{articleid}")
    public Result findByArticleid(@PathVariable String articleid){
    	return new Result(true, StatusCode.OK, "查询成功",commentService.findByArticleid(articleid));
    }
    

1.3 功能实现-删除评论

删除的逻辑:吐槽的评论数减一还是文章的评论数数减一,讲课中没有说,暂时这么理解。

  1. 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);
        }
    
  2. 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值