分页查询

1.分页概念

  分页查询则是在页面上将本来很多的数据分段显示,每页显示用户自定义的行数。可提高用户体验度,同时减少一次性加载,内存溢出风险。

1.1.真分页

每次翻页从数据库中查询数据。

  1. 优点:不容易造成内存溢出。

  2. 缺点:实现复杂,性能相对低。

1.2假分页

一次性查询所有数据存入内存,翻页从内存中获取数据。

  1. 优点:实现简单,性能高。

  2. 缺点:容易造成内存溢出。

2、参数

2.1.用户需要传入的参数

  1. currentPage(num/page):当前页,跳转到第几页,int 类型,设置默认值,比如 1。

  2. pageSize(size/limit):每页最多多少条数据,int 类型,设置默认值,比如 10。

2.1.分页需要展示的数据

  1. start:首页。

  2. prevPage:上一页。

  3. nextPage:下一页。

  4. totalPage:末页页码。

  5. totalCounts:总记录数。

  6. currentPage:当前页。

  7. 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条有效数据,

 

 

posted @ 2022-09-09 21:56  他乡一故知  阅读(2008)  评论(0编辑  收藏  举报