课堂课题:
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)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
标题:
【修真院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
还行,分页问题基本讲清楚了,
回复