• 第10章 MyBatisPlus实现分页检索


    序言

    1.内容介绍

    ​ 本章介绍了分页API的实现方式分类以及参数说明,依次引入了原生SQL分页实现、自定义分页插件实现以及分页插件IPage实现方式一 一展开了实战演练。

    2.理论目标

    • 掌握基于原生SQL方式进行分页结构
    • 掌握自定义分页Bean的构造方式
    • 掌握分页插件IPage的优势

    3.实践目标

    • 能熟练使用原生SQL方式,满足灵活的分页检索功能
    • 能熟练使用自定义分页方式完成复杂分页功能
    • 能熟练使用分页插件IPage,提升开发效率

    4.实践案例

    • 原生SQL分页实战
    • 基于分页插件IPage实现分页操作

    5.内容目录

    • 1.分页API概述
    • 2.原生SQL分页
    • 3.分页插件IPage

    第1节 分页API概述

    1. 分页API说明

    描述方法返回类型
    无条件分页查询page(IPage page);IPage
    条件分页查询page(IPage page, Wrapper queryWrapper);IPage
    无条件分页查询pageMaps(IPage page);IPage>
    条件分页查询pageMaps(IPage page, Wrapper queryWrapper);IPage>

    参数说明

    类型参数名描述
    IPagepage翻页对象
    WrapperqueryWrapper实体对象封装操作类QueryWrapper

    2. Count记录数统计

    描述方法返回类型
    查询总记录数count();int
    根据 Wrapper 条件,查询总记录数count(Wrapper queryWrapper);int

    参数说明

    类型参数名描述
    WrapperqueryWrapper实体对象封装操作类 QueryWrapper

    第2节 原生SQL分页

    1. 单表分页查询

    • 采用原生sql方式实现
    • 需求:查询user表
      • 按照年龄进行排序
      • 每页2条
      • 通过传递page,检索指定也的列表信息

    1.1 编写UserMapper.java

     
    

    @Select("${sql}") List queryByCondition(@Param("sql") String sql);

    1.2 编写IUserService.java

     
    

    //分页查询 List queryAtPage(int page,int pageSize);

    1.3 编写UserServiceImpl.java

     
    

    @Override public List queryAtPage(int page, int pageSize) { //计算索引 int beginIndex =(page-1)*pageSize; //声明sql String sql="select * from user limit "+beginIndex+","+pageSize; //执行查询 List userList = this.userMapper.queryByCondition(sql); return userList; }

    1.4 编写UserController.java

     
    

    //分页查询 @RequestMapping(value="/queryByPage/{page}",method = RequestMethod.GET) public String queryAtPages(@PathVariable int page){ //执行的返回结果 Map map = new HashMap(); try{ List userList =userService.queryAtPage(1,2)//查看第1页,每页2条 if(userList!=null&&userList.size()>0){ map.put("status",200); map.put("data",userList); }else{ map.put("status",-1); map.put("message","没有检索到相关数据!"); } }catch (Exception ex){ map.put("status","500");//执行出现异常 map.put("message","异常信息:"+ex.getMessage()); } return JSON.toJSONString(map); }

    1.5 执行,观察效果

    2. 自定义分页插件

    需求:两表分页查询

    • 数据表
      • user:用户表
      • addressinfo:用户地址表
    • 需求说明:
      • 实现两表分页查询
      • 检索字段:用户名、年龄、发货地址
      • 每页:2条

    2.1 编写PageInfo.java

     
    

    //封装Page元素信息 public class PageInfo { private int nowPage; //当前页数 private int pageSize; //每页记录条数 private int totalNum; //总记录数 private int totalPage; //总页数 private List data; //当前页记录集合 //...setter等方法 }

    2.2 编写UserMapper.java

     
    

    //原生Sql方式查询信息集合 @Select("${sql}") List query(@Param("sql") String sql); //原生sql方式返回记录数 @Select("${sql}") int queryCount(@Param("sql") String sql);

    2.3 编写IUserService.java

     
    

    //自定义分页查询 PageInfo queryAtPage2(int page,int pageSize);

    2.4 编写UserServiceImpl.java

     
    

    @Override public PageInfo queryAtPage2(int page, int pageSize) { //分页sql String sql1="select name,age,address " + "from user u " + "inner join addressinfo a on u.id=a.uid " + "order by age DESC " + "limit "+(page-1)*pageSize+","+pageSize; //检索总记录数的sql String sql2="select count(*) count " + "from user u " + "inner join addressinfo a on u.id=a.uid"; //得到当前记录集合 List userList = this.userMapper.query(sql1); //得到总记录数 int totalCount = this.userMapper.queryCount(sql2); //得到总页数 int toalPage = totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1; //封装PageInfo实体bean PageInfo pageInfo = new PageInfo(page,pageSize,totalCount,toalPage,userList); return pageInfo; }

    2.5 编写UserController.java

     
    

    //分页查询 @RequestMapping(value="/queryByPage/{page}",method = RequestMethod.GET) public String queryAtPages(@PathVariable int page){ //执行的返回结果 Map map = new HashMap(); try{ PageInfo pageInfo=userService.queryAtPage2(1,2);//查看第1页,每页2条 if(pageInfo!=null){ map.put("status",200); map.put("data",pageInfo); }else{ map.put("status",-1); map.put("message","没有检索到相关数据!"); } }catch (Exception ex){ map.put("status","500");//执行出现异常 map.put("message","异常信息:"+ex.getMessage()); } return JSON.toJSONString(map); }

    2.6 执行,观察效果

    开始实验

    第3节 分页插件IPage

    1. 分页API类说明

    • Page(current,size):
      • current:当前页,long类型
      • size:每页显示的数量,long类型
    • IPage:包含了当前页号、总页数、总记录数、当前页集合等
    • 优点:采用了封装了特性,提高开发成本

    2. 分页插件IPage应用

    2.1 编写配置文件

     
    

    @EnableTransactionManagement @Configuration @MapperScan("cn.com.chinahitech.springboot_user.*.mapper") public class MyBatisPlusConfig { /** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); //你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制 //paginationInterceptor.setLimit(2); return paginationInterceptor; } }

    2.2 编写UserMapper.java

     
    

    IPage selectPage(Page page);

    2.3 编写UserMapper.xml

     
    

    2.4 编写IUserService.java

     
    

    IPage selectPage(Page page);

    2.5 编写UserServiceImpl.java

     
    

    @Override public IPage selectPage(Page page) { return this.userMapper.selectPage(page); }

    2.6 编写UserController.java

     
    

    @RequestMapping("/selectPage/{page}") public String selectPage(@PathVariable int page) { /** * Page(current,size) * current:当前页,long类型 * size:每页显示的数量,long类型 */ IPage userIPage = userService.selectPage(new Page(page, 2)); return JSON.toJSONString(userIPage); }

    2.7 执行,观察效果

    开始实验

  • 相关阅读:
    DGIOT国内首家轻量级物联网开源平台——真实ModbusRTU接入实战教程
    Linux系统编程
    android WebRtc 视频通话(P2P)
    优维产品最佳实践第14期:让重要告警能有序跟进,最终根治
    如何快速识别图片中的文字?建议使用者两种方法
    Mathcad的使用与设计
    免费IP类api接口:含ip查询、ip应用场景查询、ip代理识别、IP行业查询...
    Arduino驱动VEML7700传感器(光照传感器篇)
    VMWare虚拟机 centos时间与本地时间不一致的问题
    RocketMQ的介绍和环境搭建
  • 原文地址:https://blog.csdn.net/a1234556667/article/details/126447121