mybatispuls中提供分页查询中需要两个参数,一个是IPage接口的实现类,还有一个后面说。
IPage有且只有一个实现类Page类型在里面已经提供有了,传两个参数即可使用,一个是页码值,一个是每页显示数据的条数。查询完之后可以通过Page提供的物种get方法获取各项信息。
@Testpublic void testGetbypage(){IPage page=new Page(1,2);userMapper.selectPage(page,null);System.out.println("当前页码值"+page.getCurrent());System.out.println("每页显示数"+page.getSize());System.out.println("一共多少页"+page.getPages());System.out.println("一共多少条数据"+page.getTotal());System.out.println("数据"+page.getRecords());}
但是从上面的这个查询结果可以看见后三条有问题,这里的查询直接变成了查询全部。
分页查询
即在select * from 表名 ???? limit 1,2 就代表了,查询结果中偏移量为1得到的连续前两个数据,如下图所示,这算是一种增强,在原有基础上增加一些功能。称为拦截并增强。
配置mybatispuls拦截器
mybatispuls提供了一个拦截器叫做分页拦截器,配上了分页功能就有,不配置的话就没有分页功能。
该拦截器是个Bean,需要到配置类中配置这个Bean。
新建一个MpConfig专门用来定义MyBatis的Bean
@Configuration
public class MpConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){//1.定义拦截器MybatisPlusInterceptor mybatisPlusInterceptor=new MybatisPlusInterceptor();//2.添加具体的拦截器mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); //return mybatisPlusInterceptor;}
}
要想让这个配置类中的Bean被加载有多种方法,这里选择在这个配置类上添加一个@Configuration注解,这样就会被扫描器发现了。
再次测试分页功能
这一次成功输出了5条正确的信息。最后查询结果也是只有两条。
开启mp的日志(输出到控制台)
开启之后再次测试有如下的输出
可以看见分页查询的语句后面有接limit ?,这个问号就是输入的参数。
第一行还有个查询元素个数的语句。
把Page的两个参数改成(2,2)之后代表查询第二页的两条数据。此时的输出结果有如下:
limit后面接了两个问号,因为现在不是第1页了,需要多一个参数,limit语句只接一个数据时表示从第一条开始的?条数据。
小结
这里的分页查询封装主要步骤就是,安装插件,添加配置类,使用IPage进行操作,最终查询结果都还在IPage当中。日志功能可开可不开。