帖子详细页面设计到两张表如下
用户表 (user)用于展示用户的信息 和 discuss_post(帖子表) 用于展示点击某一个帖子时的详细信息
字段 | 备注 |
---|---|
id | 帖子id |
user_id | 用户id |
title | 帖子的标题 |
content | 帖子的内容 |
type | 帖子类型(0–普通帖子 1–置顶) |
status | 帖子状态(0–正常帖子 1–精华帖子 2–拉黑帖子) |
create_time | 帖子发布时间 |
comment_count | 帖子的评论数量 |
score |
本节中的实现功能如下,帖子详情页面的的开发相对来说比较容易,没有涉及到新的知识点。
先分析一下帖子的详情页面需要展示哪些内容,需要查询的表为 discuss_post
表和user
表
分别查询两张表
查询帖子的信息
DiscussPost getDisPostById(int id);
查询发布帖子的用户信息
User getUserByDisPostId(int id);
sql代码(注意:sql代码可以通过注解的方式写在discussPostMapper接口中方法的上面,也可以写在 DoscussPostMapper.xml文件)
select * from discuss_post where id = #{id};
select * from user where id = #{id};
serice层
业务层目前没有涉及到较为复杂的业务,主要是以查询dao为主
@Override
public DiscussPost getDisPostById(int id) {
return discussPostMapper.getDisPostById(id);
}
@Override
public User getUserByDisPostId(int id) {
return discussPostMapper.getUserByDisPostId(id);
}
接收前端传过来的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";
}
前端页面将发贴人的头像名称,发布时间以及帖子的标题等信息通过模板的方式进行展示
技术要点
对于前端跳转路径有两种方式
前端使用 a标签跳转到详情页面需要携带数据时
<a th:href="@{/discuss/discussDetailPage(id=${item.post.id})}" />a>
此时后端的接收方式
@GetMapping("/discussDetailPage")
public String getDiscussDetailPage(Model model,@RequestParam("id") int id){}
前端通过使用||
符号,在子该符号中的${}
中括号的内容为变量,其它内容为常量。
<a th:href="@{|/discuss/detail/${item.post.id}|}">a>
后端需要通过@PathVariable
注解的方式接收前端传过来的参数。
@GetMapping("/discussDetailPage/{id}")
public String getDiscussDetailPage(Model model,@PathVariable("id") int id){}