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

课堂课题:

SpringMVC分页查询和显示

关联任务:

任务五

直播时间:

2018-10-05 15:30: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修真院北京分院第35期的学员赵君钊,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网Java(职业)任务二,深度思考中的知识点——SpringMVC分页查询和显示

1. 背景介绍


分页查询就是根据需要每次只返回所需要的数据,而不用每次都从数据库中全部把数据提取出来,这样可以降低程序与数据库之间的数据传送量,并且还可以提高程序的性能。 一般来说我们在数据量大的情况下总是会分页显示。分页查询优点:排版清晰,界面美观每页信息数量固定,查询效率快根据用户的需要,提供适当的数据提高性能,减少内存的压力,提高访问速度


2. 知识剖析


分页查询分为逻辑分页和物理分页


逻辑分页


逻辑分页是在用户第一次访问时,将数据库的所有记录全部查询出来, 添加到一个大集合中,然后再通过代码获取分页数据,常用的操作是一次性从数据库中查询出全部数据并存储到List集合中,因为List集合有序,再根据索引获取指定范围的数据。


逻辑分页主要用于数据量不大、数据稳定的场合。逻辑分页一次性将数据读取到内存,占用了较大的内容空间。而且逻辑分页一次性将数据读取到内存,数据发生改变,数据库的最新状态不能实时反映到操作中,实时性差。


物理分页


物理分页使用数据库自身所带的分页机制,例如,Oracle数据库的rownum,或者Mysql数据库中的limit等机制来完成分页操作。因为是对数据库的数据进行分页条件查询, 所以叫物理分页。每一次物理分页都会去连接数据库。物理分页主要用于数据量较大、更新频繁的场合。每次只读取一部分数据,占用内存空间较小。物理分页每次需要数据时都访问数据库,能够获取数据库的最新状态,实时性强。


MySQL查询语句:


1)select * from table


2)select * from table limit m,n


3.常见问题


Mybatis分页插件PageHelper

PageHelper的原理是基于拦截器实现的。拦截器的配置有两种方法,一种是在mybatis的配置文件中配置,一种是直接在spring的配置文件中进行


在执行sql前添加插件,完成分页功能在查询的sql语句执行之前,添加一行代码PageHelper.startPage(param1, param2);第一 个参数表示第几页,第二个参数表示每页显示的记录数。这样在执行sql后就会将记录按照语句中设置的那样进行分页。如果需要获取总记录数的话,需要PageInfo类的对象,这个对象可以获取总记录数.


4.解决方案


5.编码实战


6.扩展思考


PageInfo这个类里面的属性:


pageNum当前页

pageSize每页的数量

size当前页的数量

orderBy排序

startRow当前页面第一个元素在数据库中的行号

endRow当前页面最后一个元素在数据库中的行号

total总记录数(在这里也就是查询到的用户总数)

pages总页数 (这个页数也很好算,每页5条,总共有11条,需要3页才可以显示完)

list结果集

prePage前一页

nextPage下一页

isFirstPage是否为第一页

isLastPage是否为最后一页

hasPreviousPage是否有前一页

hasNextPage是否有下一页

navigatePages导航页码数

navigatepageNums所有导航页号

navigateFirstPage导航第一页

navigateLastPage导航最后一页

firstPage第一页

lastPage最后一页


7.参考文献


参考资料:https://www.jianshu.com/p/50fcd7f127f0

————Mybatis分页插件PageHelper


8.更多讨论


PageHelper的安全性?


PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。

只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal存储的对象。


4.X和5.X的配置?


5.x版本开始使用com.github.pagehelper.PageInterceptor新版拦截器。总的来说,pagehelper4.x就该用4.x的配置,pagehelper5.x就用5.x的配置(官方推荐)


PageHelper的缺点


它对逆向工程生成的代码支持不好,不能对有查询条件的查询分页,会抛异常


9.鸣谢


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


10.结束语:


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



评论

[北京|荣耀师兄]JAVA-岳晓鹏 发表于 2018-10-07 20:18:06 #1

对逆向不友好是因为逆向通常的分页逻辑也是offset和limit,两者有冲突;知识点讲到了,但是拓展有点少,比方说不用pagehelper用什么来进行分页

回复

请您登录 后进行评论