开发社区首页

  • 显示首页
    • 过程理解
    • Dao
    • Service
    • Controller
  • 实现分页
    • 过程理解
    • Controller

显示首页

过程理解

  • 目标:显示帖子
  • 原料:数据库内帖子数据
  • 步骤:
    • 按要求获取数据库内的帖子数据信息(Dao)
    • 提供Controller所需要的数据:帖子,总行数(Service)
    • 用Model存入数据,返回html(Controller)
    • 修改视图层模板

Dao

实体类对应数据库中的帖子表信息
Mapper接口获取数据(实体类的实例)
.xml Mapper接口对应的SQL查询语句

  • 实体类
// 实体类-entity-DiscussPost
package com.nowcoder.community.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.util.Date;
@Document(indexName = "discusspost", type = "_doc", shards = 6, replicas = 3)
public class DiscussPost {@Idprivate int id;@Field(type = FieldType.Integer)private int userId;public int getId() {return id;}public void setId(int id) {this.id = id;}//...@Overridepublic String toString() {return "DiscussPost{" +"id=" + id +", userId=" + userId +", title='" + title + '\'' +", content='" + content + '\'' +", type=" + type +", status=" + status +", createTime=" + createTime +", commentCount=" + commentCount +", score=" + score +'}';}
}
  • Mapper接口
// Mapper接口-dao-DiscussPostMapper
package com.nowcoder.community.dao;
import com.nowcoder.community.entity.DiscussPost;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface DiscussPostMapper {List<DiscussPost> selectDiscussPosts(int userId, int offset, int limit, int orderMode);// @Param注解用于给参数取别名,// 如果只有一个参数,并且在<if>里使用,则必须加别名.int selectDiscussPostRows(@Param("userId") int userId);int insertDiscussPost(DiscussPost discussPost);
}
  • 接口对应SQL语句
<!--映射对应的接口-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nowcoder.community.dao.DiscussPostMapper"><sql id="selectFields">id, user_id, title, content, type, status, create_time, comment_count, score</sql><sql id="insertFields">user_id, title, content, type, status, create_time, comment_count, score</sql><select id="selectDiscussPosts" resultType="DiscussPost">select <include refid="selectFields"></include>from discuss_postwhere status != 2<if test="userId!=0">and user_id = #{userId}</if><if test="orderMode==0">order by type desc, create_time desc</if><if test="orderMode==1">order by type desc, score desc, create_time desc</if>limit #{offset}, #{limit}</select><select id="selectDiscussPostRows" resultType="int">select count(id)from discuss_postwhere status != 2<if test="userId!=0">and user_id = #{userId}</if></select></mapper>

Service

向Controller提供帖子和总行数

// community-service-DiscussPostService
package com.nowcoder.community.service;
@Service
public class DiscussPostService {@Autowiredprivate DiscussPostMapper discussPostMapper;public List<DiscussPost> findDiscussPosts(int userId, int offset, int limit, int orderMode) {return discussPostMapper.selectDiscussPosts(userId, offset, limit, orderMode);}public int findDiscussPostRows(int userId) {return discussPostMapper.selectDiscussPostRows(userId);}
}

Controller

数据装在Model中,修改模板,返回html

// community-controller-HomeController
package com.nowcoder.community.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class HomeController implements CommunityConstant {@Autowiredprivate DiscussPostService discussPostService;@Autowiredprivate UserService userService;@RequestMapping(path = "/index", method = RequestMethod.GET)public String getIndexPage(Model model) {List<DiscussPost> list = discussPostService.findDiscussPosts(0, page.getOffset(), page.getLimit(),orderMode);List<Map<String, Object>> discussPosts = new ArrayList<>();if (list != null) {for (DiscussPost post : list) {Map<String, Object> map = new HashMap<>();map.put("post", post);User user = userService.findUserById(post.getUserId());map.put("user", user);discussPosts.add(map);}}model.addAttribute("discussPosts", discussPosts);return "/index";}
}

实现分页

过程理解

  • 页码实体类,方便或许分页的页面信息
  • 将Page注入Model中,返回html
  • Page的信息,通过url中传过来

Controller

添加page的实体类
page的信息,通过url中传过来

<!-- /index?current=1&limit=5 -->
<a class="page-link" th:href="@{${page.path}(current=${page.current-1})}">上一页</a></li>
// community-controller-HomeController@RequestMapping(path = "/index", method = RequestMethod.GET)
public String getIndexPage(Model model, Page page) {// 方法调用栈,SpringMVC会自动实例化Model和Page,并将Page注入Model.// 所以,在thymeleaf中可以直接访问Page对象中的数据.page.setRows(discussPostService.findDiscussPostRows(0));page.setPath("/index?orderMode="+orderMode);List<DiscussPost> list = discussPostService.findDiscussPosts(0, page.getOffset(), page.getLimit(),orderMode);List<Map<String, Object>> discussPosts = new ArrayList<>();if (list != null) {for (DiscussPost post : list) {Map<String, Object> map = new HashMap<>();map.put("post", post);User user = userService.findUserById(post.getUserId());map.put("user", user);discussPosts.add(map);}}model.addAttribute("discussPosts", discussPosts);return "/index";
}

仿牛客论坛-开发社区首页-3相关推荐

  1. 仿牛客论坛项目(上)

    代码仓库:https://gitee.com/qiuyusy/community 仿牛客论坛项目(下) 仿牛客论坛项目上 1. Spring 在测试类中使用Spring环境 @Primary的作用 @ ...

  2. 仿牛客论坛项目(4)

    仿牛客论坛项目 一.Elasticsearch入门 1.1 elasticsearch安装 1.2 修改config目录下的elasticsearch.yml配置文件 1.3 配置环境变量 1.4 下 ...

  3. 仿牛客论坛项目(下)

    代码仓库:https://gitee.com/qiuyusy/community 仿牛客论坛项目(上) 仿牛客论坛项目 15.kafka 1.阻塞队列 2.Kafka入门 简介 术语解释 下载 配置 ...

  4. 从零开始—仿牛客网讨论社区项目(一)

    主要技术架构: SpringBoot Spring SpringMVC MyBatis Redis Kakfa Elasticsearch Spring Security Spring Actator ...

  5. 从零开始—仿牛客网讨论社区项目(六)

    主要技术架构: SpringBoot Spring SpringMVC MyBatis Redis Kakfa Elasticsearch Spring Security Spring Actator ...

  6. 仿牛客论坛项目(3)

    仿牛客论坛项目 一.阻塞队列 1.1 测试 二.kafka入门 2.1 kafka下载 2.2 测试 三.Spring整合kafka 3.1 引入依赖 3.2 修改配置文件 3.3 测试 四.发布系统 ...

  7. 仿牛客论坛项目(5)

    仿牛客论坛项目 一.SpringSecurity入门案例 1.1 添加依赖 1.2 配置文件 1.3 工具类 CommunityUtil 1.4 配置类 SecurityConfig 1.5 实体类 ...

  8. 仿牛客网讨论社区项目—优化网站性能

    性能优化: 1.考虑加入缓存优化 优化热门帖子列表 GitHub中搜索caffeine 在Maven Repository搜索caffeine配置文件,在resources文件包内的pom.xml文件 ...

  9. (仿牛客论坛项目)01 - 开发社区首页

    文章目录 前言 1.做项目的步骤 2.开发社区首页功能分步 2.1 User 类 2.2 UserMapper 接口 2.3 UserMapper 映射文件 2.4 编写测试类 3.开发社区首页,显示 ...

最新文章

  1. [hadoop源码阅读][9]-mapreduce-概论
  2. MyEclipse快捷键大全(绝对全)
  3. 补天白帽大会:无处不在的无线电攻击
  4. MySQL数据库备份及二进制文件恢复
  5. C++中四种类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast要点解析
  6. 字符串转换成ascii码
  7. 户外lisp导向牌如何安装_聚焦热点、难点,持续开展户外广告(招牌)专项整治...
  8. 云存储精华问答 | 云存储是如何工作的?
  9. java的地位_Java地位无可动摇的12个原因
  10. (zt)OpenGL中的Alpha测试,深度测试,模板测试,裁减测试
  11. Win32项目生成的程序exe图标显示异常的问题
  12. 帆软报表重要Activator之DesignerStartup
  13. 一个由于springboot自动配置所产生的问题的解决
  14. 实验7-3-4 字符串替换 (15 分)
  15. cc语言取消引用_「初识C语言」编译过程
  16. 文科辅修计算机科学,英属哥伦比亚大学专业详情.docx
  17. 以前积攒的一个用Java程序生成验证码的代码
  18. vb视屏教程计算机二级b,计算机二级vb教程|二级vb视频教程|计算机二级视频教程|快速通过计算机二级VB|猎豹网校视频...
  19. word计算机计算公式求总和,word2010如何算总和 word中如何在表格中计算总和
  20. MyBatis自带的缓存配置(Cache)

热门文章

  1. 使用高德地图api去掉地图左下角的logo
  2. Jeecg系统上线相关配置
  3. 220g格斗机器人建造日志(1) —— 结构和硬件设计
  4. 北京专科计算机学校排名及分数线,北京高职高专院校排名及分数线汇总(2021年报志愿参考)...
  5. 万物皆可集成系列:低代码对接Web Service接口
  6. 全球十大外汇黄金交易平台排名2020版
  7. 【BOOST C++容器专题03】【07】Boost.Intrusive
  8. Honeywell手机安装扫描二维码功能配置
  9. spring boot mail 发送邮件,及25端口更换到465端口
  10. 听说CSDN推出一款浏览器助手,网友直呼YYDS,出于好奇心,今天带大家体验一下