仿牛客论坛-开发社区首页-3
开发社区首页
- 显示首页
- 过程理解
- 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相关推荐
- 仿牛客论坛项目(上)
代码仓库:https://gitee.com/qiuyusy/community 仿牛客论坛项目(下) 仿牛客论坛项目上 1. Spring 在测试类中使用Spring环境 @Primary的作用 @ ...
- 仿牛客论坛项目(4)
仿牛客论坛项目 一.Elasticsearch入门 1.1 elasticsearch安装 1.2 修改config目录下的elasticsearch.yml配置文件 1.3 配置环境变量 1.4 下 ...
- 仿牛客论坛项目(下)
代码仓库:https://gitee.com/qiuyusy/community 仿牛客论坛项目(上) 仿牛客论坛项目 15.kafka 1.阻塞队列 2.Kafka入门 简介 术语解释 下载 配置 ...
- 从零开始—仿牛客网讨论社区项目(一)
主要技术架构: SpringBoot Spring SpringMVC MyBatis Redis Kakfa Elasticsearch Spring Security Spring Actator ...
- 从零开始—仿牛客网讨论社区项目(六)
主要技术架构: SpringBoot Spring SpringMVC MyBatis Redis Kakfa Elasticsearch Spring Security Spring Actator ...
- 仿牛客论坛项目(3)
仿牛客论坛项目 一.阻塞队列 1.1 测试 二.kafka入门 2.1 kafka下载 2.2 测试 三.Spring整合kafka 3.1 引入依赖 3.2 修改配置文件 3.3 测试 四.发布系统 ...
- 仿牛客论坛项目(5)
仿牛客论坛项目 一.SpringSecurity入门案例 1.1 添加依赖 1.2 配置文件 1.3 工具类 CommunityUtil 1.4 配置类 SecurityConfig 1.5 实体类 ...
- 仿牛客网讨论社区项目—优化网站性能
性能优化: 1.考虑加入缓存优化 优化热门帖子列表 GitHub中搜索caffeine 在Maven Repository搜索caffeine配置文件,在resources文件包内的pom.xml文件 ...
- (仿牛客论坛项目)01 - 开发社区首页
文章目录 前言 1.做项目的步骤 2.开发社区首页功能分步 2.1 User 类 2.2 UserMapper 接口 2.3 UserMapper 映射文件 2.4 编写测试类 3.开发社区首页,显示 ...
最新文章
- [hadoop源码阅读][9]-mapreduce-概论
- MyEclipse快捷键大全(绝对全)
- 补天白帽大会:无处不在的无线电攻击
- MySQL数据库备份及二进制文件恢复
- C++中四种类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast要点解析
- 字符串转换成ascii码
- 户外lisp导向牌如何安装_聚焦热点、难点,持续开展户外广告(招牌)专项整治...
- 云存储精华问答 | 云存储是如何工作的?
- java的地位_Java地位无可动摇的12个原因
- (zt)OpenGL中的Alpha测试,深度测试,模板测试,裁减测试
- Win32项目生成的程序exe图标显示异常的问题
- 帆软报表重要Activator之DesignerStartup
- 一个由于springboot自动配置所产生的问题的解决
- 实验7-3-4 字符串替换 (15 分)
- cc语言取消引用_「初识C语言」编译过程
- 文科辅修计算机科学,英属哥伦比亚大学专业详情.docx
- 以前积攒的一个用Java程序生成验证码的代码
- vb视屏教程计算机二级b,计算机二级vb教程|二级vb视频教程|计算机二级视频教程|快速通过计算机二级VB|猎豹网校视频...
- word计算机计算公式求总和,word2010如何算总和 word中如何在表格中计算总和
- MyBatis自带的缓存配置(Cache)
热门文章
- 使用高德地图api去掉地图左下角的logo
- Jeecg系统上线相关配置
- 220g格斗机器人建造日志(1) —— 结构和硬件设计
- 北京专科计算机学校排名及分数线,北京高职高专院校排名及分数线汇总(2021年报志愿参考)...
- 万物皆可集成系列:低代码对接Web Service接口
- 全球十大外汇黄金交易平台排名2020版
- 【BOOST C++容器专题03】【07】Boost.Intrusive
- Honeywell手机安装扫描二维码功能配置
- spring boot mail 发送邮件,及25端口更换到465端口
- 听说CSDN推出一款浏览器助手,网友直呼YYDS,出于好奇心,今天带大家体验一下