分页查询
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //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); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //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条有效数据,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律