分页查询
1.分页概念
分页查询则是在页面上将本来很多的数据分段显示,每页显示用户自定义的行数。可提高用户体验度,同时减少一次性加载,内存溢出风险。
1.1.真分页
每次翻页从数据库中查询数据。
-
优点:不容易造成内存溢出。
-
缺点:实现复杂,性能相对低。
1.2假分页
一次性查询所有数据存入内存,翻页从内存中获取数据。
-
优点:实现简单,性能高。
-
缺点:容易造成内存溢出。
2、参数
2.1.用户需要传入的参数
-
currentPage(num/page):当前页,跳转到第几页,int 类型,设置默认值,比如 1。
-
pageSize(size/limit):每页最多多少条数据,int 类型,设置默认值,比如 10。
2.1.分页需要展示的数据
-
start:首页。
-
prevPage:上一页。
-
nextPage:下一页。
-
totalPage:末页页码。
-
totalCounts:总记录数。
-
currentPage:当前页。
-
pageSize:每页记录数。
3、实现代码
ssm
//方法接口 PageResult findPage(Integer currentPage, Integer pageSize, String queryString);
//实现类
public PageResult findPage(Integer currentPage, Integer pageSize, String queryString) { // 使用分页插件PageHelper// 1:初始化分页操作 PageHelper.startPage(currentPage,pageSize); // 2:使用sql语句进行查询(不必在使用mysql的limit了) Page<TravelItem> page = travelItemDao.findPage(queryString); // 3:封装 return new PageResult(page.getTotal(),page.getResult()); }
//dao层接口 public interface TravelItemDao { Page<TravelItem> findPage(String queryString); }
//映射文件 <select id="findPage" parameterType="string" resultType="travelItem"> select * from t_travelitem <where> <if test="value!=null and value.length>0"> name like "%"#{value}"%" or code=#{value} </if> </where> </select>
spring boot
//controller层 public R pageList( @ApiParam(value = "当前页码", required = true) @PathVariable Long page, @ApiParam(value = "每页记录数", required = true) @PathVariable Long limit, @ApiParam(value = "查询对象") HospitalSetQueryVo hospitalSetQueryVo){ //分页查询 Page<HospitalSet> pageModel = hospitalSetService.selectPage(page, limit,hospitalSetQueryVo); //获得当前分页的数据集合 List<HospitalSet> records = pageModel.getRecords(); //获得总页数 long total = pageModel.getTotal(); //返回结果集 return R.ok().data("total",total).data("rows",records);
//impl实现类 @Override public Page<HospitalSet> selectPage(Long page, Long limit, HospitalSetQueryVo hospitalSetQueryVo) { //1.分页查询,根据 Page<HospitalSet> pageMdel = new Page<>(page, limit); //2.查询条件 QueryWrapper<HospitalSet> queryWrapper = new QueryWrapper<>(); //2.1判空操作 if(hospitalSetQueryVo!=null){ queryWrapper.like(!StringUtils.isEmpty(hospitalSetQueryVo.getHosname()),"hosname",hospitalSetQueryVo.getHosname()); queryWrapper.eq(!StringUtils.isEmpty(hospitalSetQueryVo.getHoscode()),"hoscode",hospitalSetQueryVo.getHoscode()); } //3.调用父类的条件查询 ,无返回值,根据条件进行查询, baseMapper.selectPage(pageMdel,queryWrapper); //4.返回查询的page对象 return pageMdel; }
实例 page=1,limit=2 ,数据库中共有7条有效数据,