• 9_帖子详情


    帖子详细页面设计到两张表如下

    用户表 (user)用于展示用户的信息 和 discuss_post(帖子表) 用于展示点击某一个帖子时的详细信息

    字段备注
    id帖子id
    user_id用户id
    title帖子的标题
    content帖子的内容
    type帖子类型(0–普通帖子 1–置顶)
    status帖子状态(0–正常帖子 1–精华帖子 2–拉黑帖子)
    create_time帖子发布时间
    comment_count帖子的评论数量
    score

    本节中的实现功能如下,帖子详情页面的的开发相对来说比较容易,没有涉及到新的知识点。

    image-20221008114554151

    1. 首先从DiscussPostMapper开始写

    先分析一下帖子的详情页面需要展示哪些内容,需要查询的表为 discuss_post表和user

    分别查询两张表

    • 需要注意的是根据 discuss_post的id进行查询,也就是用户点击的帖子
    • 将用户点击的帖子的id传到请求页,来确定帖子通过数据库的查询获得帖子的详细信息
    • 通过点击帖子的id查询发布帖子的用户
    1. dao的代码,在discussPostMapper接口中书写如下代码
    查询帖子的信息
    DiscussPost getDisPostById(int id);
    查询发布帖子的用户信息
    User getUserByDisPostId(int id);    
    
    • 1
    • 2
    • 3
    • 4

    sql代码(注意:sql代码可以通过注解的方式写在discussPostMapper接口中方法的上面,也可以写在 DoscussPostMapper.xml文件)

    select * from discuss_post where id = #{id};
    select * from user where id = #{id};
    
    • 1
    • 2
    1. serice层

      业务层目前没有涉及到较为复杂的业务,主要是以查询dao为主

    @Override
    public DiscussPost getDisPostById(int id) {
        return discussPostMapper.getDisPostById(id);
    }
    
    
    @Override
    public User getUserByDisPostId(int id) {
        return discussPostMapper.getUserByDisPostId(id);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. cotroller

    接收前端传过来的id,并通过Model对象将查询的数据返回给页面。目前还没有涉及到帖子的回复查询,后面涉及到了再在后面添加。

     /**
         * 前往帖子详情页面
         * @return
         */
        @GetMapping("/discussDetailPage")
        public String getDiscussDetailPage(Model model,@RequestParam("id") int id){
            logger.debug("id是:{}",id);
            DiscussPost post = postService.getDisPostById(id);
            model.addAttribute("post",post);
            User user = postService.getUserByDisPostId(post.getUserId());
            model.addAttribute("user",user);
            return "site/discuss-detail";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1. 前端页面

    前端页面将发贴人的头像名称,发布时间以及帖子的标题等信息通过模板的方式进行展示

    技术要点

    对于前端跳转路径有两种方式

    • 方式一

    前端使用 a标签跳转到详情页面需要携带数据时

    <a th:href="@{/discuss/discussDetailPage(id=${item.post.id})}" />a>
    
    • 1

    此时后端的接收方式

     @GetMapping("/discussDetailPage")
        public String getDiscussDetailPage(Model model,@RequestParam("id") int id){}
    
    • 1
    • 2
    • 方式二

    前端通过使用||符号,在子该符号中的${}中括号的内容为变量,其它内容为常量。

    <a th:href="@{|/discuss/detail/${item.post.id}|}">a>
    
    • 1

    后端需要通过@PathVariable注解的方式接收前端传过来的参数。

     @GetMapping("/discussDetailPage/{id}")
        public String getDiscussDetailPage(Model model,@PathVariable("id") int id){}
    
    • 1
    • 2
  • 相关阅读:
    iPhone垃圾清理器:AnyMP4 iOS Cleaner for mac
    【Pytorch笔记】2.张量操作
    Machine Learning(一)KNN算法
    Java动态代理Proxy.newProxyInstance
    【JavaSE】继承那些事儿
    特斯拉被称为自动驾驶领域的苹果
    Flink学习16:算子介绍map
    【ViT(Vision Transformer)】(二) 阅读笔记
    什么是单链表?
    索引背后的数据结构——B+树
  • 原文地址:https://blog.csdn.net/weixin_47994845/article/details/127760970