00:00
呃,咱们今天呢,还是讲这个。收成的第五阶段啊,还是这个图书的模块。那么大家注意看一下哈。前面我们已经把什么图书的修改,删除以及添加都做完了,那今天咱们干嘛呢是吧?呃,现在呢,咱们来看一下图书的分页。在讲这个图书的分页之前呢,咱们先说明一下,大家注意看一下哈,咱们现在这个图书管理列表页面,它是干嘛?它是一次把全部的图书都查询出来,并且展示在页面上,那么在实际的开发当中啊,是不会这么做的啊,因为一次加载全部的数据呢,会非常的慢啊,而且呢,显示在界面上啊,会显得很凌乱啊,一般情况下会怎么办呢?会对这个数据啊进行分页处理,就比如说我们首页大家看一下,首页这里呢,就会对这个图书的信息进行一下分页,那么我们希望什么?我们希望我们的后台也是对这个数据啊进行一下分页。
01:10
那么我们给大家希看一下效果哈,那么我们希望达到的是什么?好。就是分页,那分页大概什么效果呢?请看哈,就是每页大概呢,只显示四条这样子,然后这下面是什么?哎,是这个分页,分页的一个效果。好,我们把这个分页条啊也拿过来。Okay。好了,那么分页怎么去实现呢?我们就要来说一说了,哎,首先呢,我们要去思考一下,先由这个分页的一个视图效果,先思考出它所需要的一个对象模型,这个对象模型怎么办?我们来看一下哈。
02:03
我们说由分页。的这个什么呢,试图分析出。分页的对象模型。配置啊,这是一个类哈,那这个类里面用来干嘛呀,用来显示数据的。这个类就是用来在页面上显示数据用的,那这个类应该有哪些信息呢?我们就来看一下了。首先页面上有什么信息,这个类就有什么信息。哎,首先你看啊,这里要有什么当前页码,叫做配置number啊,当前页码第二个是总的页码,就一共有几页。Page total总页码,还有就是总的记录数,呃,总记录数好,那么还有什么呀,我们来看一下哈。
03:05
我再隔一下好,还有就是上面这个。每页显示几行,每页显示数量,哎,还有呢,就是上面这一页,当前页的数据是什么叫items。当前页数据大家看一下哈,那么如果说有一个对象叫做配置,那么这个配置里面有这个属性叫当前页码,总页码,总记录数和每页显示的数量,以及当前页的数据,那么我们这里分页。要展现给用户需要的数据就都有了。啊就都有了,那但是问题是那这些数据怎么求才是关键的难点是吧?哎,那这些数据都怎么求呢?我们来看一下哈,分析一下。
04:02
首先先看什么呢?Page number。当前页码,当前页码应该怎么求啊是吧,大家注意看,当前页码呢,是由客户端进行传递,简单一点说就是说客户端发过来是多少。就是多少,为什么是这样子,大家想一想,当用户点击了这个分页条一,呃,这个首页的时候,那它的页码肯定是一呀。啊,这肯定不会变成时代是吧?诶那么当用户点击了三的时候呢,当前页码肯定就是三个嘛,我要看第三页的数据嘛,是吧?诶当用户点击了什么。五的时候,那当时当前页码就变成五。所以page number当前页码由客户端进行传递。还有一个叫做page size。每页显示数量由什么东西啊?两种啊因素决定,一种是什么?
05:10
一种是什么客户端进行传递啊,跟这个配number一样,由客户端进行传递。客户端那边是可以设置的,我给大家看一个图啊,就是百度。你上百度的时候,它有一个分页的数量设置,你看你看啊,我给你截下来图了,你访问百度的时候,它有搜索设置,你可以让它每页显示几条,但是可以客户端设置之后他决定的啊,他设置好这个发给服务器,服务器就会记录下来一直用啊一种呢是客户端进行传递给他们知道一下那另一种。是什么由页面。布局决定举个例子说,咱们这个首页,你看它也是分页,那么这个布局就决定了,每页只能显示四条是吧,你再放一条呢,就放不下了。
06:04
啊,就有两种情况,两种情况好。给咱们了解一下。啊。我换个颜色。OK,那么这里呢,有五个属性,咱们已经求出两个来了,还有什么?哎,还有啥?还有就是总的记录数,总记录数怎么求?可以由C口语句求得是吧?那么circle语句是是什么样子呢?Select count的心。图龙表明,这不就可以求我这条表当中一共有几条记录吗?是吧?那的记录数也就求出来了,呃,总的记录数也求出来了,好,那么有了总的记录数之后啊,咱们又可以求什么东西呢?总页码?
07:07
总页码怎么求?然后大家觉得怎么求呢。总页码。可以诶,由总记录数除什么东西呢?每页数量得到就好了吗?你想想啊,一共呢,这个八条记录,每页显示四条,那八除四自然就得到二嘛,是吧,这没有什么复杂的东西。哎,但是这里需要注意什么。这里需要注意什么,大家想想哈,那如果说你一共是九条记录呢,每体四条,九除四整除得二,还余下一个呀,那余下的这个也得占一页啊,那也就是说大家注意看的话,它要注意一个小点。他要注意一个点。
08:00
注意什么东西呢?哎,总记录数。如果取于每页数量大于零,那就是除不尽对吧,剩下的则折什么东西呢?总页码加一,大家注意了啊,这个地方注意力不要跟上啊,分页是非常难的,不太好理解,大家注意力一定要跟上啊,好,大家再来看哈,这个呢就是。总页码。的求的一个思路啊,那再来看一下哈,五个属性,咱们已经求出1234,还剩下谁呀。哎,只要解决了X呢,那整个分页就就差不多解决了是吧,X怎么求。It是当前。当前页数据,那么也是可以由SQL语句求得。
09:05
那啥C口语句呢?C口语句是啥啊?不知道大家还记不记得分页那个C口语句,你看一下哈,C口语句是是什么。请看。Select新表明A,然后limit。SE。哎,Begin science begin呢就是开始的一个索引,Science呢,就是每页的数量是吧,就是每页的数量嘛,就其实就是page science嘛,啊,就是配置三美颜数量。好了,那么对于这个C语句而言,大家注意看啊,Select固定的心是列明啊,也差不多固定的装表明,那你查哪张表是哪张表,这也是可以确定的啊,那么这里面不能确定的是什么?就begin啊,那PHS也是固定的,每页显示几条就是已知的吗?是吧?已知的,那么begin怎么求?在这里面只要求得begin整个配置模型。
10:08
就迎刃而解了。来,我们看一下begin怎么求。Begin啊,可以由公式求得啊,Begin可以由公式求得什么公式?来请看一下B等于什么呢?叫做page number减一,然后乘以。Pay the size就完了是吧?有这个公式就可以求下begin的值了,好,我们可以给大家推理一下啊,给大家推理看一下这个效果。如果说假设。哎,假设。那么当前是第一页。每页。
11:00
四条记录,则begin等于什么东西呢?按照这个算一下哈,那就是一减一乘四得。啊,得什么东西呢?哎,零就这么简单吗?是吧,那么以此类推。来看一下二三,那二第二页的时候呢,它是二,第三页时是三,你看着哈,二减一再乘四得什么四。下面这个呢,走八走八是吧,那有同学不进去问老师,这东西管用不管用啊,行不行啊,来吧,我们打开这个数据库的客户端软贴,然后连着试试吧,试试不就知道了嘛,是吧,行不行拿出来溜溜,大家注意看这个是什么图书表好了,现在呢,我要从这个图书表里面呢取得第一页啊,分页时的第一页的数据,那么按照我们刚刚所分析的整个内容来看的话,它就应该换成上面这个语句,然后begin是多少?第一页是什么零好。
12:14
我们来试试看啊。Select新表明是吧,表明就是book嘛,然后limit是多少零啊,咱们刚刚说过的,呃,Size呢,就是每写的四条这固定的好我们执行一下,那这个值是什么?来看1234没问题吧,好好,那接着如果说是第二页呢,第二页是四,你看见吧,然后你拿一个四是什么。来找你没问题吧,5678是吧,那如果到第三页呢,肯定是九十十一十二嘛。那第三页的是多少把?来请看走你对吧,跟我们所算的诶是一样的效果是一样的效果好了,那这些就可以说明咱们整个思路是没有问题的。
13:06
那现在呢,咱们已经通过这个呃,演算思考,已经知道如何求。这个配置当中的五个数据是吧,好了,那接下来下一步咱们要干嘛呢。啊,咱们要干嘛啊,大家注意看一下哈,我们把整个分页的实现也给大家分析一下,除了这个模型是吧,那分页如何实现呢?分页本身是很困难的,咱们来看一下吧。那么大家注意看,当我们点击这个分页的时候,分页条当中每个内容,你点击它是不是会发起请求给服务器,让服务器来执行一个分页的功能。啊,请求发给谁呀?谁来接收请求啊,So that。好,那这个地方是什么?是不可。
14:01
Book接受这个请求,大家注意看啊,这里book程序,那么我们说了每一个功能都会有一个。相应的方法,那这里呢也不例外,Public war的配置啊,用来处理分页。是吧,这个用来处理分页。Okay。好了好了,那么大家大家来看一下啊,也就是说当用户点击了上面某一个分页条中的按钮或者数值是吧?诶,它就请求发过来,那么这里需要干啥呢?大家注意看着哈,需要传递两个参数,其实这两个参数啊,咱们刚刚在分析的过程当中就已经提及到了,那么是哪两个参数呢?大家想想看,我们说当前页码是不是由客户端传递啊,你都点了三了,你是不是应该把这个三给我?哼,对吧?要不然我哪知道你点了谁呀?诶还有什么,就是每页显示的数量。
15:12
这两个都需要发啊,如果不发的话,这个就会由默认的一个值由布局决定是吧?好了,那么说两个参数分别是什么,Page number和。就这样子。啊,就这样子好,这个呢,咱们来了解一下。哎呀,还差一点点。啊,行了,好,需要传递两个参数啊,需要传递两个参数好了,那么请求发过去之后,他也接收这个请求了,他如何处理啊,啊,我们不禁要思考如何处理啊,大家注意看着哈,首先第一个是干嘛呢?就是获取请求的参数page number和。
16:03
好了,哎,然后第二是干嘛呢,调用book service.page方法,你把这个page number和page size传给他。哎,然后呢,它会根据这个业务的需要,给你返回一个配置分页的对象,这个对象呢,就用于我们在页面上进行输出回血,对吧?哎,回血好了,那么有同学问老师你咋知道,诶这个有这方法,有这参数啊。其实道理很简单呢,大家仔细想想咱们以往做的所有的操作,哎,咱们回来稍微可以稍微看看哈,Book里面。啊,你随便找一个是吧,比如说添加你得到参数之后,是不是调用它的方法,你添加图书,那你得把图书给他呀,再看你删除是吧,删除你得到删除是不是也得调用这个它的方法,哎,你说删除,那你得告诉删除那个ID啊,你看到不?那比如说更新,那更新你得到删数,你看还是调用book c的方法,怎么办呢?告诉人家更新的内容,那咱们这个地方呢,你要做分页,那你肯定要调用它的方法呀,那比如说你做分页,那你肯定得告诉我你要第几页的数据啊,啊,你每页要几条记录啊,看懂了吧?哎,你看他需要这样一个方法啊,然后呢,把需要的参数传给人,那么返回的这个结果呀,肯定就是根据你的业务需要嘛,你不知道分页嘛,分页得啥分页它就得到一个分页对象嘛,是吧,这很正常,哎,那给你返回一个配置,那这个配置用来干啥的呀?哎,咱们刚才也说了,是用来给页面显示使用,那怎么办。
17:43
那你这个数据怎么样?交给JP去显示,还记得吗?保存到request域中。哎,保存到那个的句中,然后请求啊,转发到哪呀,斜杠page下的many左下的book major连接P页面就好了嘛,这个页面就是什么,就是我们后台这个页面啊,原来是什么显示全部数据的,而咱们现在呢,要把它改成分页。
18:18
好了,这就是web层他要干的事情。哎,他要干的事情,那么我们再来看service是什么呢?他要干什么,咱不就有三层嘛,是吧,咱们刚分析完web层,那咱们来看看其他,比如说service层。好。大家解决四维时要干啥?很简单的,你这里不是已经调用思维的一个方法了吗?那我这里肯定干嘛提供一个方法给你调用啊,是吧?嗯,Public返回值配置对象方法名叫做配置,哎,参数我们刚刚也写了,你看啊参数什么page number呀。
19:01
和page size,这不是写了吗?是吧?这个方法处理分页业务就这。啊,处理这个分页的业务。好,OK,那么这里就会变成什么呢?大家看看哈,这个流程就变成你的第二步,就会调用下面这一个方法。得到就这样子,那么我们不禁又要问了,那老师,那这方法就干啥呀?这方面就干啥。大家想想这方面干啥呢?你觉得?哦,有朋友说的很好,对吧,这方法呢,要返回一个分页对象有啥,你看这不是反回对象嘛。是吧,你肯定是给我求一个分页对象返回嘛,那你想想啊,分页对象返回还不简单吗?我直接溜一下,不就有一个分页对象嘛,对吧?那问题的关键不是执法有个分享对象就完了,而是除了有这个对象以外,我们还要给它的五个属性分别赋值啊,求它的值啊。
20:09
对吧,这才是难点,好了,那么这里的关键就是求配置当中的五个属性的值给人返回。那其实难吗?其实说难也难,说不难也不难,大家来看一下哈,配置当中有五个属性,你看已经有两个属性从参数这里传进来,那其实你只要求三个就行了啊,那这里的核心是吧只诶。这里的核心呢,就只需要求三个。属性就可以了,你看啊,求三个属性即可。啊,那奶箱属性呢,咱们还是列一下吧,啊,列一下用什么东西啊呃,记录数总页码当前页数据是吧,那其实在这三个里面,咱们要简单说明一下。
21:05
啊,总记录数怎么求,这边不是写了吗?一个类count语句呀,是吧,那总页码呢,你有总记录数,你还求不出总页码除一下呗。是吧,哎,除一下呗,对吧,好了,那么当前页数据呢,这个稍微复杂一点,其实前面两个呀,这个是最简单。什么的,除像嘛,还不会吗?哈,哎,好了,那我们就把求的这两个关键,也就是总记录数和当前页数据咱们拿来好好说道说道,怎么求总的记录数啊啊,其实咱们刚刚也看到了总记录数。大家注意看到哈总记录数。由CL语句求的,这里也分析也说到了哈,那么这里面C口语句是啥?大家请看哈,就是select康的心。
22:04
还有呢,当前页数据是吧,也是由C口距就可以求出来select的心。From表明,哎,然后limit begin size,而这个size呢,就是上面的size是吧?OK,大家了解一下,那其实就是什么,执行两个SL语句呗。不就是吗?是吧,那执行三个语句就是要干嘛,就是要跟数据库交互,那交互谁来做呀,DAO啊。大家想想哈,我们只要执行了这个赛Q语句,那么page当中的五个属性不就都迎刃而解了?哈,好,那这就是色B层咱要干的事情,那DAO层。DAO成分,咱们再来看一下哈,DAO它需要干啥?
23:01
好。Book DAO程序咱们请看一下哈,那么DAO,那肯定咱们说它是跟数据库交互的,嗯,那数据库交互怎么办呢?那你得提供方法,就指这些语句啊,对吧?好,那我们为他准备两个方法,一个上面俩语来大家看下哈,它呃,咱们写方法名就行了,叫做query for page total current。这是什么?求总记录数啊,这个是求的记录数的,那么咱们还需要一个方法,叫做什么东西呢?Query啊,我得再再来一次。好,还有就什么呢?Query for it,这是干啥呀?哎,求当前页数据嘛,不就干两个事情吗?是吧?是求这么两个事情吗?好了,那么这两个事情它所对应的是什么?就是上面两三个语句嘛。
24:09
来,咱给咱拿过来。哎呀,给他拿过来就完事了。走你是吧,哎,这是什么?求总记录数,那下面这个。不就是求当前页数据吗?就都有了呗。好。呃,行吧,不这样了哈,好了,那这就是DA团他就要干的事情,那么上面要求的两个总基督数啊和当前耶稣据总团通分别通过调用以下两个方法。去求的。好。OK。那么这个呢,就是分页的整个实现内容啊,除了它的页面,你看页面效果有什么东西啊,有这个模型数据的分析,还有它整个后台实现的细节啊。
我来说两句