中间有些功能由于不是核心功能所以跳过了没有实现~
具体可参考:【Spring Boot论坛项目实战】3、开发社区核心功能
- 0 需求分析
- 1 数据访问层
- 1.1 表
- 1.2 写实体类
- 1.3 写Mapper接口
- 1.4 写Mapper对应的xml
- 1.5 测试
- 2 业务层
- 2.1 需求分析
- 2.2 写代码
- 3 视图层
- 3.1 需求分析
- 3.2 写代码
- 4 动态页面
现在帖子下面的回复都是静态页面写死的,需要根据数据库查到的不同内容动态显示回帖
先对数据库有个了解:comment表
id:主键
user_id:发表评论的用户
entity_type:实体类型,可以是对帖子的评论、对评论的评论、对课程的评论、对题目的评论等
entity_id:该实体的id
target_id:该评论指向的人(注意不是实体),就像图里红框所示,虽然这条评论是对评论的评论(实体类型是评论),但是这条评论也是有指向一个人的(图里是sissi)
content:评论内容
status:状态,0代表正常,1代表被删除
create_time:评论时间
类名与表名一致(这里与下面的“一致”是内容一致,命名规范不同,如comment表的实体类类名叫Comment)
属性与表列名一致、get/set方法、toString
public class Comment { private int id; private int userId; private int entityType; private int entityId; private int targetId; private String content; private int status; private Date createDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public int getEntityType() { return entityType; } public void setEntityType(int entityType) { this.entityType = entityType; } public int getEntityId() { return entityId; } public void setEntityId(int entityId) { this.entityId = entityId; } public int getTargetId() { return targetId; } public void setTargetId(int targetId) { this.targetId = targetId; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } @Override public String toString() { return "Comment{" + "id=" + id + ", userId=" + userId + ", entityType=" + entityType + ", entityId=" + entityId + ", targetId=" + targetId + ", content='" + content + ''' + ", status=" + status + ", createDate=" + createDate + '}'; } }1.3 写Mapper接口
1.注解@Mapper
2.写方法声明
首先帖子评论跟首页的帖子一样,要分页展示的,所以需要一个根据offset和limit查找帖子列表的方法。查找评论都要通过实体类型和实体id确定是给哪个实体评论的,再查找
分页需要知道一共多少条评论
添加评论的方法
@Mapper public interface CommentMapper { List1.4 写Mapper对应的xmlselectCommentsByEntity(int entityType, int entityId, int offset, int limit); int selectCountByEntity(int entityType, int entityId); int insertComment(Comment comment); }
头与sql语法都在官网:https://mybatis.org/mybatis-3/zh/getting-started.html
1.头
namespace写mapper路径
2.sql语法
- #{}里写mapper方法里传入的参数,其他就是普通sql语句
- id是mapper方法名
- resultType是mapper返回类型,简单数据类型可不写,自定义数据类型(我不写了也没事,但最好写)
- parameterType是mapper传入参数的类型,简单数据类型可不写,自定义数据类型(我不写了也没事,但最好写)
1.5 测试id, user_id, entity_type, entity_id, target_id, content, status, create_time user_id, entity_type, entity_id, target_id, content, status, create_time
@Autowired private CommentMapper commentMapper; @Test public void testComment(){ Listlist = commentMapper.selectCommentsByEntity(1,228,1,5); for (Comment comment:list){ System.out.println(comment); } System.out.println("------------------------"); System.out.println(commentMapper.selectCountByEntity(1,228)); System.out.println("------------------------"); Comment comment = new Comment(); comment.setStatus(0); comment.setUserId(1); comment.setContent("你好"); comment.setCreateTime(new Date()); comment.setEntityId(1); comment.setEntityType(1); commentMapper.insertComment(comment); System.out.println("------------------------"); }
成功
1.总共有多少条回帖
2.分页显示回帖
3.某条评论有多少条评论
1.@Service注解
2.注入相应Mapper
@Service public class CommentService { @Autowired private CommentMapper commentMapper; //一共有多少条回复。适用于帖子和评论 public int findCommentCount(int entityType, int entityId){ return commentMapper.selectCountByEntity(entityType, entityId); } //查找范围内的回复,适用于分页 public List3 视图层 3.1 需求分析 3.2 写代码findCommentsByEntity(int entityType, int entityId, int offset, int limit){ return commentMapper.selectCommentsByEntity(entityType, entityId, offset, limit); } }
由于显示评论的页面是帖子详情页面,有对应的Controller,就在该Controller里写
@RequestMapping(path = "/detail/{discussPostId}", method = RequestMethod.GET) public String getDiscussPost(@PathVariable("discussPostId") int discussPostId, Model model, Page page) { // 帖子 DiscussPost post = discussPostService.findDiscussPostById(discussPostId); model.addAttribute("post", post); // 作者 User user = userService.findUserById(post.getUserId()); model.addAttribute("user", user); //评论的分页信息 page.setLimit(5); page.setPath("/discuss/detail/" + discussPostId); page.setRows(post.getCommentCount()); // 评论: 给帖子的评论 // 回复: 给评论的评论 // 评论列表 List4 动态页面commentList = commentService.findCommentsByEntity( ENTITY_TYPE_POST, post.getId(), page.getStartRow(), page.getLimit()); // 评论VO列表 List
1.处理分页
复用index的分页
2.将其他需要动态展示的改为引擎模板
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)