开发基于SpringBoot和BootStrap的全栈论坛网站(五):完成首页展示以及分页功能

news/2024/5/10 4:01:34/文章来源:https://javayz.blog.csdn.net/article/details/103079089

如果你对这个项目感兴趣,可以从头看起:

开发基于SpringBoot和BootStrap的全栈论坛网站(一):准备阶段

开发基于SpringBoot和BootStrap的全栈论坛网站(二):后端人员如何快速使用BootStrap

开发基于SpringBoot和BootStrap的全栈论坛网站(三):登陆注册以及cookies的功能完成

开发基于SpringBoot和BootStrap的全栈论坛网站(四):完成问题发布功能

项目实时开发代码会放在文末,自取。源码开发进度会快于博客的进度。

完成问题发布功能后就可以开始着手进行首页的开发了,首页开发的最大难题就是对内容进行分页。现在的思路是在后端处理完分页的功能,前端直接对后端提供的内容进行展示。处理分页主要由sql语句的limit进行处理。最终的展示如下:

(一)分页的处理逻辑

我的打算是在一个页面上显示五条内容,所以为了实现这个功能首先需要创建超过5条数据库信息,为了方便我复制了12条问题信息。整体sql语句处理逻辑如下:

当需要显示1-5条时
select * from question limit 0,5;
当需要显示6-10条数据时
select * from question limit 5,5;

 基于此,设置一个变量offset,offset = size * (page - 1),使用下述sql完成分页的查找

select * from question limit #{offset},#{size};

(二)把需要展示的数据封装起来

需要展示问题的时候,我们不仅需要展示问题本身,还需要用户的信息。question属性中包含一个createid属性,如果是单纯的数据库操作,只需要把两个表联合查询就行。在Spring项目中,通过创建一个DTO来实现,DTO用来解决同时需要处理多张表的情况。新建DTO文件夹,创建QuestionDto,在question的实体类基础上新增User属性

public class Questiondto {private int id;private String title;private String description;private int createid;private int comment_count;private int view_count;private int like_count;private String tag;private long createtime;//增加一个user对象private User user;//省略getter and setter方法}

因为还需要展示页面信息,于是再新建一个PageDto,包含questionDto属性和页面属性,比如当前页面,是否展示前一页,是否展示首页等等信息。对于page的处理逻辑,我打算最多显示七个页码:

 当前页码是1时,显示1,2,3,4 当前页码是2时,显示1,2,3,4,5 ...... 当前页码是4时,显示1,2,3,4,5,6,7

 PageDto中新增setPagination方法,处理页码展示逻辑

public class PageDto {//问题内容private List<Questiondto> questions;//是否展示前一页private boolean showPre;//是否展示后一页private boolean shownext;//是否展示第一页private boolean showfirst;//是否展示最后一页private boolean showlast;//当前页码private int page;//当前展示的页码集合private List<Integer> pages = new ArrayList<>();//所有页数private int totalpage;public void setPagination(int totalcount, int page, int size) {this.page = page;if (totalcount % size == 0) {totalpage = totalcount / size;} else {totalpage = totalcount / size + 1;}//page<1就显示1,page>最大页数就显示最大页数if (page<1){this.page=1;}if (page>totalpage){this.page=totalpage;}//将需要展示的页码插入到pages中pages.add(page);for (int i = 1; i <= 3; i++) {if (page - i > 0) {pages.add(0, page - i);}if (page + i <= totalpage) {pages.add(page + i);}}//是否展示上一页if (page == 1) {showPre = false;} else {showPre = true;}//是否展示后一页if (page == totalpage) {shownext = false;} else {shownext = true;}//是否展示第一页if (pages.contains(1)) {showfirst = false;} else {showfirst = true;}//是否展示最后一页if (pages.contains(totalpage)) {showlast = false;} else {showlast = true;}}//省略getter and setter方法
}

接下来要做的事情就是把问题(question)、用户信息(User)、页码(page)全部整合到一起返回给indexController,再由indexController把数据通过model传递给前端。

(三)Service层处理数据整合业务

service层从名字上就能看出来是处理服务和业务的,数据的整合就放在service层进行处理。新建一个QuestionService,注意加上@Service标签:

@Service
public class QuestionService {//注入QuestionMapper和UserMapper@Resourceprivate QuestionMapper questionMapper;@Resourceprivate UserMapper userMapper;//将question、user、page整合后返回public PageDto list(int page, int size) {PageDto pageDto = new PageDto();int totalcount = questionMapper.count();pageDto.setPagination(totalcount,page,size);//size*{page-1}int offset = size * (page - 1);//每页只展示5条List<Question> questions = questionMapper.list(offset, size);List<Questiondto> questiondtoList = new ArrayList<>();for (Question question : questions) {User user = userMapper.findById(question.getCreateid());Questiondto questiondto = new Questiondto();//把第一个对象的所有属性拷贝到第二个对象中BeanUtils.copyProperties(question, questiondto);questiondto.setUser(user);questiondtoList.add(questiondto);}pageDto.setQuestions(questiondtoList);return pageDto;}
}

(四)前端处理和展示

只需要在indexController中加上下面两句代码:

PageDto pagination = questionService.list(page,size);
model.addAttribute("pagination", pagination);

就可以实现把返回过来的pagination对象传递给model,在html页面中,用Thymeleaf操作model数据,实现首页展示和分页功能,index.html代码请看下面的源码部分。源码的开发进度快于博客,希望可以点个star。

github代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_715430.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发基于SpringBoot和BootStrap的全栈论坛网站(六):完成个人中心、问题详情和问题编辑

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(七):完成回复和二级回复功能

论坛的搭建即将进入尾声&#xff0c;完成回复功能后只剩最后一个大功能&#xff1a;通知。然后就是对页面的精修和一些bug的修复&#xff0c;这些不会通过博客来展示&#xff0c;历史博客记录可以看我的实战项目专辑&#xff0c;在这里也不放链接了。 对一个论坛网站来说&…

开发基于SpringBoot和BootStrap的全栈论坛网站(八):完成回复通知的功能

当有人回复了你的问题时&#xff0c;肯定需要有通知能让我们看到&#xff0c;今天就来完成最后一个大功能--回复通知。具体的效果如下&#xff1a; 当有未读通知时&#xff0c;在导航栏上会显示未读通知的数量&#xff0c;点进去后能看到未读的信息&#xff0c;点击每条未读信息…

如何更改PHPCMS网站后台标题(title)

打开PHPCMS安装目录&#xff0c;选择phpcms 然后选择Languages目录&#xff0c;打开。 打开目录后&#xff0c;选择zh-cn目录&#xff0c;选择admin.lang.php用editPlus打开&#xff0c;将第九行后面的引号中的内容换成你想要改变的网站后台标题&#xff0c;保存文件 转载于:ht…

查准考证网站卡了整整一个小时进不去,被抢票支配的恐惧又来了

&#xff08;一&#xff09;概述 今天是国考出准考证的时间&#xff0c;刚好女朋友也要报名了这次考试&#xff0c;作为合格的男朋友当然是要在第一时间将准考证信息下载下来。结果到了半夜12点之后&#xff0c;整个官网一直处于无法连接、502、503、接口报错等各种问题。到了…

搜索引擎登录,网站分类目录登录地址

搜索引擎登录入口 google 如果你的网站是新发布的&#xff0c;或是访问量较低的网站在内容更新时&#xff0c;很有必要主动提交到Google&#xff0c;这样会使网站资料迅速更新倒Google搜索资料库&#xff0c;让用户能及时搜索到你的最新资料。 登录地址&#xff1a;http://www…

基于SpringBoot和BootStrap的全栈论坛网站(附上源码)

耗时大约三个星期不到的时间&#xff0c;把这个论坛项目基本上算是完成了&#xff0c;做这个项目最主要的目的是熟悉SpringBoot的使用&#xff0c;然后通过整个项目了解了BootStrap、Thymeleaf、editor.md等等工具的使用&#xff0c;今天就来做一下总结 &#xff08;一&#x…

一个有意思的网站

http://www.icpoline.com 上面看到一句话&#xff1a;傻的人之所以傻&#xff0c;那就在于他&#xff08;她&#xff09;不知道自己傻&#xff0c;如果他&#xff08;她&#xff09;知道自己傻&#xff0c;那他&#xff08;她&#xff09;就不傻。 所以&#xff0c;我敢断定…

网市场云建站 v4.8 增加私有模版库,开放 Mysql 配置、在线客服源码

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 网市场云建站系统&#xff0c;结合各种产品&#xff0c;将一个网站的服务器成本降低到0.1元&#xff01;打破传统建站的高成本&#xff0c;让价格不再是阻碍的门槛&#xff0c;让每个人都能有自…

高并发量网站解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 最近遇到高并发数据访问的问题&#xff0c;这篇博文讲的比较全面&#xff0c;值得一看。来源参考&#xff1a; http://blog.csdn.net/y_h_t/article/details/6322823 转载于:https://my.oschina.net/garyun/blog/602…

QQ登录网站接入功能实现--非官方文档搬运

背景 最近第一次使用QQ登录功能&#xff0c;期间遇到这种问题&#xff0c;在网上找了很多资料&#xff0c;大多都是官方的搬运&#xff0c;并没有真正的干料&#xff0c;可能是个人能力问题&#xff0c;遇到了各种麻烦&#xff0c;折腾了几天&#xff0c;最终弄好&#xff0c;…

从vancl看垂直商业网站的崛起

从vancl看垂直网站的崛起&#xff08;文&#xff1a;王英雄&#xff09;如果说2007年IT业内的几大事件&#xff0c;卖衬衣的卖火了&#xff0c;这肯定是2007年的重大事件之一。提起卖衬衣的&#xff0c;大家肯定会想到的是PPG&#xff0c;但我为什么不拿PPG做标题呐&#xff1f…

大型网站应用之海量数据和高并发解决方案总结一二

一、网站应用背景 开发一个网站的应用程序&#xff0c;当用户规模比较小的时候&#xff0c;使用简单的&#xff1a;一台应用服务器一台数据库服务器一台文件服务器&#xff0c;这样的话完全可以解决一部分问题&#xff0c;也可以通过堆硬件的方式来提高网站应用的访问性能&…

小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐

十年间&#xff0c;负载均衡的前沿技术层出不穷&#xff0c;令用户眼花缭乱。经常在技术网站、文档中出现的“四层负载均衡”、“七层负载均衡”字眼有什么含义?有什么区别?对客户网络有哪些不同的优化? 在大型的网站服务器集群中&#xff0c;负载均衡技术是必不可少的。使…

Flex SEO(Search engine optimization),让浏览器找到你的flash站点

Search engine optimistation 也就是让你的站点信息能被“搜索引擎”&#xff08;Google,baidu…&#xff09;搜索到。SEO总分两大类&#xff0c;white hats和black hats&#xff0c;简单讲black hats是一作弊的方法&#xff0c; 例如在meta标签中加一堆重复的关键词&#xff0…

unsharp mark 算法_Google SEO-BERT算法更新

一. BERT介绍BERT的全称为&#xff1a;Bidirectional Encoder Representations from Transformers&#xff0c;基于神经网络的自然语言处理预训练的技术。谷歌说BERT就像是一个超大的同义词系统。2019 年 10 月 25 日&#xff0c;Google 宣布 BERT 更新上线&#xff0c;正式成为…

有些网站打开一半空白_如何发一条空白的朋友圈

所谓空白的朋友圈就是一条看起来没有文字的朋友圈&#xff0c;因为发朋友圈的时候不输入文字是没法发送的。不可见字符是有文字内容的&#xff0c;只是人的肉眼看不见&#xff0c;所以相当于空白。不可见字符不可见字符就是零宽空格&#xff0c;见维基百科解释https://zh.wikip…

另类网站版式设计欣赏

另类网站版式设计欣赏 当你在创建一个新网站的时候&#xff0c;希望这些网站富有个性的版式设计能给你带来灵感。 Popmatik 这是Rob Leach设计制作的一个个人网站&#xff0c;这个网站用了一个瓶子的底图&#xff0c;网站的内容都在瓶子的这个包装纸上。 Digitalmash.com Digi…

大型网站架构系列:负载均衡详解(3)

大型网站架构系列&#xff1a;负载均衡详解&#xff08;3&#xff09; 原文:大型网站架构系列&#xff1a;负载均衡详解&#xff08;3&#xff09;本次分享大纲 软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结一、软件负载均衡概述 硬件负载均衡性能优越…

基于Dockfile构建JAVA环境网站镜像

查看本地目录 [rootdocker tomcat]# ls apache-tomcat-8.5.16.tar.gz Dockerfile jdk-8u91-linux-x64.tar.gz server.xml [rootdocker tomcat]# vim Dockerfile FROM centos:7 MAINTAINER zhaochengcheng ADD jdk-8u91-linux-x64.tar.gz /usr/local ENV JAVA_HOME /usr/loca…