前言
如果放在一张表里,控制起来很复杂,所以干脆设置成三张表
t_blog_info(帖子表)、t_comment_info(评论表)、t_floor_info(楼中楼表)
为了方便直接贴出截图(以下是按照自己的想法建的结构,仅作为项目说明,如不合理,请谅解)
数据库设计
t_blog_info(帖子表)
其中visitor_hasread为帖子访问量,
blog_item帖子唯一索引,用来快速定义帖子详情,blog_state帖子状态,标记是普通贴还是精贴等等,用枚举值标记。t_comment_info(顶层评论表)
其中blog_id用来定位所属那篇帖子t_floor_info(楼中楼表)
其中blog_id,comment_id用来定位唯一楼中楼评论
ok,以上三张基础表建好了,就可以在此基础上扩展功能了
功能简单介绍
围绕论坛基本功能主要分为搜索帖子,所有帖子展示(包含不同状态的帖子),用户个人所有帖子展示,访问量控制,评论与楼中楼加载等等
- 搜索帖子改进由like模糊查询->lucene->es,其中将帖子标题和内容进行分词和搜索,具体见es包下封装
- 所有帖子展示,分页查询所有帖子和热门贴,一般要门后端分类号直接给前端,要么前端加载利用jstl进行判断分类,由于目前每页显示数据量不大,所有直接通过前端判断分类显示了
3.用户个人所有帖子展示 同所有帖子,只不过加个用户id
4.访问量计算 按照ip和用户的访问表进行登记判断,以一天为准,通过定时器凌晨自动清空访问表,并且访问量记录在帖子表更新下
5.评论与楼中楼加载,按照所属哪个帖子直接加载其下所有数据即可,如下代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849/*** 返回帖子内容页** @param currentPage 当前页* @param encodeBlogId 帖子id* @param mv ModelAndView对象* @param request 域对象* @return 帖子内容页* @author slycmiaoxi* @since 2019-06-28*/@RequestMapping("show/{currentPage}/{encodeBlogId}")public ModelAndView show(@PathVariable int currentPage, @PathVariable String encodeBlogId, ModelAndView mv,HttpServletRequest request) {long blogId = Long.parseLong(CodecUtils.decodeData(encodeBlogId));// 1.该篇文章数据ArticleDto articleDto = itBlogInfoService.getDtoById(blogId);// 2.楼中楼数据List<FloorDto> floorDtos =(List<FloorDto>)itFloorInfoService.queryListbyPage(new Page(), new ResultMap("blogId", blogId).toMap()).getList();// 3.访问量统计boolean checked = itCritiquerecordInfoService.checkRepeat(blogId, request.getRemoteAddr());if (!checked) {TCritiquerecordInfo po = new TCritiquerecordInfo();po.setBlogId(blogId);po.setIpAddress(request.getRemoteAddr());po.setGmtCreate(new Date());po.setDeleteFlag(Enable.YES.getValue());itCritiquerecordInfoService.insert(po);TBlogInfo blogInfo = itBlogInfoService.selectById(blogId);int hasReadCount = blogInfo.getVisitorHasread();blogInfo.setVisitorHasread(++hasReadCount);itBlogInfoService.updateById(blogInfo);}// 4.评论数据Page page = new Page(currentPage, Constants.DEFAULT_EVERY_PAGE);PageModal pg = itCommentInfoService.queryListbyPage(page, new ResultMap("blogId", blogId).toMap());long total = itCommentInfoService.queryTotal(new ResultMap("blogId", blogId).toMap());new PageListUtil().pageModelList(total, mv, pg);mv.addObject("blogInfo", articleDto);mv.addObject("Floor", floorDtos);mv.setViewName("article/articleContent");return mv;}
首页设计
旧版本这里的设计是对应模块,比如友情链接,关于吧主模块等等,都是在设计一张表,然后通过一个监听器,初始化(initxx),放在session里,然后定时更新session。
目前简化了,直接提供接口,实时改变。比如友情连接
不足
由于个人经验和能力的不足以及前端比较短板,目前该模块有许多不足之处,请谅解!
比如,楼中楼的前端分页显示,自己做不出来~,有能力的在校生或者大佬如果添加,将及时更新