IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

SpringMVC分页查询和显示

关联任务:

任务五

直播时间:

2019-03-18 15:00:00


课堂内容:

视频链接:

PPT链接:

提交按钮:

小课堂内容格式


标题:

【修真院xx(职业)小课堂】课题名称

开场语:

大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX

(1)背景介绍:

背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。

(2)知识剖析:

讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。

(3)常见问题:

最少列出1个常见问题。

(4)解决方案:

写清楚常见问题的解决方案。

(5)编码实战:

尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。

(6)拓展思考:

知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。

(7)参考文献:

引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。

(8)更多讨论:

Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答

(9)鸣谢:

感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

SpringMVC分页查询和显示     中品

辅导师兄 [郑州|结业弟子]JAVA-张泉良


标题:

【修真院Java小课堂】SpringMVC分页查询和显示

开场语:

大家好,我是IT修真院郑州分院第10期的学员,一枚正直纯洁善良的后端程序员,今天给大家分享一下,修真院官网Java任务2,深度思考中的知识点——SpringMVC分页查询和显示

(1)背景介绍:

SpringMVC分页查询背景:

当线上研发代码编写不规范,使用mybatis编写sql语句时使用万能匹配查询语句:where 1 = 1 之后,如果拼接的if条件都不符合条件,就会出现sql语句查全表的情况,在这种情况下就会导致数据过多,塞满内存,不断GC(垃圾收集),导致整个服务宕掉。

解决办法:

第一种:使用分页查询,引用Limit,限制查询出的数据条数

服务器性能、资源:如果数据量过大时,使用分页查询后,可以避免一次查询全表数据过多,硬生生把内存塞满,不断GC,整个服务宕掉的情况。用户体验:分页查询可以使页面显示更加美观整洁。

第二种:使用<choose></choose>固定查询范围

(2)知识剖析:

SpringMVC分页分类

一、概述:

1.物理分页

物理分页依赖的是某一物理实体,这个物理实体就是数据库,比如MySQL数据库提供了limit关键字,程序员只需要编写带有limit关键字的SQL语句,数据库返回的就是分页结果。

2.逻辑分页

逻辑分页依赖的是程序员编写的代码。数据库返回的不是分页结果,而是全部数据,然后再由程序员通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合有序,再根据索引获取指定范围的数据。

二、实现

limit的语法select * from table where ... limit start,size; </p>

start:从第几条记录开始。

size : 读取几条记录。

首先需要知道,从第几条[下标]开始读,要往后读取多少条。

即分页显示的话,需要传给sql语句两个参数,某一页面中第一条在表中的下标,以及页面中数据的条数。

size:默认指定一个,或者从前台输入后取一个。

start下标:前端传过来要跳转到的页码,后台sql中加入(pageNum-1)*size的计算,即为对应页面的start下标值。

另一种方式是一种方式是,前端js计算完,直接传值过来。不涉及sql语句的计算。

(3)常见问题:

1、limit分页实现需要哪些参数?

2、ssm框架实现分页还有哪种方式

(4)解决方案:

1、limit分页实现需要哪些参数?

select * from table where ... limit start,size;

size:每页显示多少条 (pageRows)

start:每页的起始行号(beginRownum)

每页的起始行号(beginRownum) = 当前页数(pageNum - 1)* 每页条数(pageRows)

beginRownum = (pageNum - 1) * pageRows;

总条数(totalRows)/每页条数(pageRows)=总页数(totalPages)有无余数 url中传值负数跳页面

totalPages = totalRows % pageRows == 0 ? totalRows / pageRows : (totalRows / pageRows) + 1

2、ssm框架实现分页还有哪种方式

PageHelp分页插件

(5)编码实战:

(6)拓展思考:

Limit分页优化:

1、分段 每次只能翻100页,超过一百页的需要重新加载后面的100页,解决每次加载数据量过大,速度慢。

2、子查询优化 记录每次取出的最大id :Select * From test Where ID>=(Select ID From test limit 90000,1)limit 100 比较 Select * From cyclopedia limit 90000,1

3、做索引

.........

(7)参考文献:

https://www.cnblogs.com/kunpengv5/p/10025069.html

https://blog.csdn.net/lvoelife/article/details/81943070

(8)更多讨论:

Q1:怎么确保在url中直接传页码参数可以跳转正确页面?

A1:在前端页面中页面跳转部分做a标签跳转,同时在控制器中做页码判断,合法页码正常跳转,负数页码跳转第一页,超过当前总页数的页码数跳转分页查询末页。

Q2:分页查询使用插件与不使用插件有什么区别

A2:不使用插件:关于页码、总页数、每页显示条数等这个实体类需要自己写

使用插件:插件帮我们封装了页码等实体类,需要配置文件帮助我们使用

Q3:为什么分页查询做子查询可以优化分页性能

A3:Select * From cyclopedia limit 90000,1 一共查90001条数据的全部字段内容之后抛弃前面90000条显示第90001条

Select * From test Where ID>=(Select ID From test limit 90000,1)  查出90001条字段的id取第90001条id,根据id再进行全部字段内容查询

所以可以优化分页性能

9)鸣谢:

感谢观看,如有出错,恳请指正

(10)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~


评论

[郑州|结业弟子]JAVA-张泉良 发表于 2019-03-29 13:02:00 #1

还行,分页问题基本讲清楚了,

回复

请您登录 后进行评论