00:01
那在这个地方呢,呃,我们已经实现了一个分页功能了,这分页功能呢,我们其实只是单纯的实现了分页而已,那如果在分页的基础上,我们想要实现一些复杂的查询的话,那这个需求呢,也是常见的,就一边分页一边根据一些查询条件进行查询,对不对?好,那么我们就需要在后面这个地方呢,添加query rapper,那么通过query rapper呢,来组装一些复杂的查询条件,有的时候呢,我们这个query rapper组装的查询条件呢,可能也不太给力,也就是说我们的语句太复杂了,或者是说呢,有些同学呢,不习惯于使用query rapper,就想去通过自定义XML文件的方式,通过自己写SQL的方式呢,来写一些查询语句,那么同时也要做分页。啊,这个时候我们怎么来做,那所以呢,接下来我讲一下在XML配置当中如何使用分页,那么既然是XML配置,那也就意味着我们需要去在我们的map当中去自定义我们的这个持久层的方法,所以呢,我们先找到我们map的接口user map,在这个user map接口里面呢,我们定义一个方法,啊,那这个方法的定义呢,很简单。
01:19
我直接把这个粘过来啊,顺便我也把注释粘过来。好,那么大家看一下。代码很简单啊,虽然这个文字比较多,我们一点点来看返回值是不是我们的配置对象啊,那当然了,我们的配置对象呢,它上面还有一个接口叫I配置,所以说如果你想用面向接口的编程的方式的话,在这个地方呢,你就可以写这个I配置接口了啊,那怎么看它的这个接口呢?比如说刚才我们在。测试当中哈。这个地方啊,看配置,你看它上层是不是I配呀,所以我们其实是可以直接使用I配置来定义我们的配置对象的,那这个是第一个步骤啊,在user map当中添加这样的一个接口,那么这个接口里面呢,有两个参数,第一个参数就是我们的分页对象参数了啊,第二个参数呢,就是我们的呃,查询条件,那这个查询条件根据我们具体的业务来灵活的去设置,这个里面我们传递了一个age,只是举了一个简单的例子而已。好接下来呢,我们就针对这样的一个接口呢,生成它的statement。
02:34
Out加enter可以generate statement好,在这个位置呢,我们把这个statement给它生成,生成了之后呢,大家来看在这块我们回车一下,那么在这个select这样的一个配置当中呢,我们就可以写我们的查询了,我们怎么查呢?或者是说我们查什么呢,我们就查。根据年龄。查询用户列表,那我们查,比如说年龄大于这个A的所有的用户,并且呢要分页展示啊,我们来执行这样的一个功能,或者说我们来实现这样的一个功能,查询年龄大于age的用户,并且呢分页展示,所以呢这块我们写啊。
03:20
Like,然后呢,我们还是从这些列里面。来进行一个。这个这个条件的一个组装啊,从这个啊。Base column list啊,这个circle片段当中进行一个circle列的一个组装,然后接下来呢。From我们的user表。好,接下来呢,我要查查什么呢,查年龄。Where?Age。大于大于什么呢?看一下我们的接口的定义,是不是这面定义了一个A呀,啊好,那在这面呢,我们就直接写一个占位符就可以了。
04:02
啊,那这个占位符我们其实写什么都行,那我们就和那边保持一致写A。就写好了,有的同学说不对呀,分页在哪分页不用写。只要我们在接口当中传递了配置对象就可以了,那么my be plus他在帮我们组装这个XML语句的时候,它会在所对应的这个select的配置啊,这样的一个。方法当中我把VO删掉吧,有可能大家有可能不知道这什么意思,项目当中我们会用这个名字的啊,现在我把它删掉好,只要我们在这个地方传递了一个配置。参数啊,然后呢,到这个地方来,我们的my business plus在执行我们这个查询的时候,它会自动的去读取参数当中的配置对象,并且把参数当中的这个配置对象作为我们整个的这个查询。
05:05
条件的。一个后缀给他,追加到我们的查询语句当中,所以呢,我们不用自己去写limit语句,它会自动完成。这个可以理解吧,啊,所以这块呢,就是我们整个的这样的一个定义,然后接下来呢,我们来看啊。我们如何去调用它呢?我们呢,可以在我们的测试这个地方,比如说还是刚才我们的intercept test啊在这个测试当中。啊,嗯,重名了是吧?啊,我给它改一下啊select page。By age吧,行吗?叫VO,我觉得嗯,不太好。要这个吧。改一个名字啊。好,然后呢,我们直接去调用它,调用它怎么调用呢?就在这个intercept test这个地方。再写一个方法,叫做test。
06:04
好,然后接下来呢,我们在这个地方呢,写。Public。Wide。Test。Leg。Page by。Age行吧,嗯,写它吧。然后接下来呢,在这个地方呢,我们就执行查询叫user map.select page。这呢by age啊,然后呢,我们来啊,首先它需要两个参数啊,我们刚才定义的第一个参数呢,就是一个配置对象,第二参数呢,就是一个age,我们呢,先把第一个参数给它定义出来,叫new。配置,那接下来呢,我们写泛型好,然后接下来呢,我们写参数。第一页每页五条记录,然然后在接下来呢,我们把。这个配置对象呢,给它定义出来好,然后呢,这块也叫配置。
07:00
Parameter接下来呢,我们把这个配置parameter呢,传递到这个参数的位置,在接下来呢,我们查询一个,比如说我就想查询所有年龄大于18的用户行吧,查询年龄大于50的吧,我就想查询所有年龄大于50的用户行吧,哈,好,查完了之后呢,他这个值在哪存着呢?依然是在配置parameter里面存着。然后呢,这边我们就直接点gets就行了,跟之前都是一样的啊。啊,把这个users取出来,然后呢,user.for each。好,把它打印出来就可以了,那我们来试验一下。
08:00
我来看一下啊。它出现了一个错误是吧,我们来看它为什么会报错。啊,在这个地方呢,它说是。The error may exist in fair user map,然后呢,这块是select count sing from user where age大于ID,他说呢,Table user不存在是不是为什么?因为我们那个user其实已经不叫user了,是不是叫t user了啊,所以呢,我们需要把这个表名不要忘了改一下啊好,那所以呢我们在这个地方。啊,叫做T下划线。User是不是啊,好,那所以呢,我们再来进行一个测试。好。应该还有列有问题哈,还有列有问题,就是哪个列了应该。
09:01
是name了是不是啊,看一下他是不是报这个错了哈,这个是之前我们自己给自己挖的坑啊,但是没关系,我们给他解决一下,大家看这块是不是有一个叫unknown column ID in field list。也就是说在我们的数据列表当中,有一个叫做ID的一个列也不存在,那么我们是不是这个地方也得改成UID啊啊,然后还有什么你在运行它应该还有问题是吧?因为我们在这个数据库当中,这个叫username了,是不是啊,我们再来看一下这个错误啊,就是这个错误,咱们大家一定要学会识别啊。你看这回该报。是不是该报name了啊,他说没有这个名字叫做nameme的这个列,那所以应该是什么呀,应该是username啊,所以说其实我们在有的时候在写一些新功能的时候啊,有可能会为老功能引入错误,那这个在我们的项目开发的过程当中,我们都有一个环节叫什么呢?叫回归测试啊,就是正常情况下我们开发新功能之后,有一些核心的老功能,有的时候还要测一测。
10:06
因为说不定啥时候你就会引入一些bug,在你不知不觉的情况下,对不对,所以这块就体现出来了啊。嗯,那我们再测一下。好,这个时候呢,我们的这个查询呢,就完成了,主要呢,我们来看一下他的查询语句啊,首先呢,它也是先执行了一个select count,然后from tu age大于呃,这这样的一个传递的一个参数50,然后呢,把50传进去,好查询出16条记录,接下来呢,如果在有记录的情况下呢,它会执行什么呀,Select u ID username age,然后把这个当前的这个记录呢,就给他查出来了。啊,然后你会发现后面的这个,呃,Limit是不是自动追加的呀,我们在写搜QL语句的时候看这面。我们并没有写limit,我们只做了什么呀,我们只是在接口当中添加了这样的一个配置参数,但是my business plus它在执行的时候,它会自动的读取我们接口当中的配置参数,并且呢,帮助我们自动的追加到整个啊SQL语句的末尾啊,这是这样的一个情况。
11:19
啊,那另外呢,在这面我再补充一个知识点啊,比如说我们看一下咱们这个数据库当中的所有的数据吧。啊,年龄最大的应该是,哎呀,这么大了400岁哈,好,那我们就查询所有大于400岁的人。呃,按理来说应该查不出来是不是啊,所以我们来看一下。在。这个位置啊,我们就,嗯传A大于400。行吧。然后执行查询。
12:02
好,我们来看生成的色口啊。大家看,生成的circle只有一个。刚才我们在执行前面的一系列的分页查询的时候,大家都知道了,已经很熟悉了,他会执行两个circleq,这两个circleq分别是统计。总记录数的一个circle,还有一个呢,就是查询当前页带limit语句的那个circle,那前提是什么?前提是你第一条circle口查询的记录数它应该是大于零的,那么它才会执行第二个circle口。如果你的第一个circle口查询出来之后,这个记录数没大于零,等于零了,那么有没有必要执行第二个circle了?实际上是没有必要的。对不对,没有记录你还查什么呀,所以这个其实也是买贝plus在分页的过程当中一个小小的优化啊好,那么这是。分页里面我们需要强调的一个点啊,就是它会做自动的优化,记录数为零,那么就不再执行分页查询了,记录数大于零,再执行分页查询,好,这是我们的分页功能。
我来说两句