文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mybatis数据库分页查询

2023-10-07 14:03

关注

数据库分页查询

分页查询的优点

在这里插入图片描述
在这里插入图片描述

PageHelper实现分页查询原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<dependency>            <groupId>com.github.pagehelpergroupId>            <artifactId>pagehelper-spring-boot-starterartifactId>        dependency>

在这里插入图片描述

PageHelper的基本使用

编写持久层

在这里插入图片描述

 // 分页查询所有订单的方法    // 适用 PageHelper 框架完成分页查询的原理是在 sql 语句运行时,在 sql 语句后添加 limit 关键字    // 所以在持久层编写方法时,没有任何分页查询的特征,也无需关注分页业务(注解和 xml 都是)    @Select("select id, user_id, commodity_code, count, money from order_tbl")    List<Order> findAllOrders();

在这里插入图片描述

编写业务逻辑层

下面就转到业务逻辑层实现类,先编写一个方法使用PageHelper的功能

先不用写接口,直接在业务逻辑层中写方法

OrderServiceImpl添加方法

// 参数page是页码,pageSize是每页条数public PageInfo<Order> getAllOrdersByPage(Integer page, Integer pageSize){    // PageHelper框架实现分页的方法,就是在执行查询之前,设置分页条件    // 使用PageHelper.startPage方法设置本次查询要查询的页码和每页条数    // PageHelper的页码从1开始,也就是page是1,就查询第一页    PageHelper.startPage(page,pageSize);    // 上面的分页条件设置完毕后,下面进行的查询,就会在sql语句后自动添加limit关键字    List<Order> list=orderMapper.findAllOrders();    // 上面的list就是要查询的当页数据,但是不包含分页信息(总页数,总条数,有没有上一页等)    // 所以作为分页工具,必须返回包含这个分页信息的对象,也就是声明的返回值PageInfo    // 当前方法返回时,直接实例化PageInfo对象,构造方法中会自动计算分页信息    // 同时传入list作为参数,将list中的数据赋值给PageInfo    return new PageInfo<>(list);}

编写控制层

在这里插入图片描述

@Autowired//      ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓private OrderServiceImpl orderService;@GetMapping("/page")@ApiOperation("分页查询所有订单")@ApiImplicitParams({        @ApiImplicitParam(value = "页码",name="page",example = "1"),        @ApiImplicitParam(value = "每页条数",name="pageSize",example = "10")})public JsonResult<PageInfo<Order>> pageOrder(Integer page,Integer pageSize){    PageInfo<Order> pageInfo = orderService.getAllOrdersByPage(page, pageSize);    return JsonResult.ok("查询完成!",pageInfo);}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

附:PageInfo全部分页信息属性

//当前页private int pageNum;//每页的数量private int pageSize;//当前页的行数量private int size;//当前页面第一个元素在数据库中的行号private int startRow;//当前页面最后一个元素在数据库中的行号private int endRow;//总页数private int pages;//前一页页号private int prePage;//下一页页号private int nextPage;//是否为第一页private boolean isFirstPage;//是否为最后一页private boolean isLastPage;//是否有前一页private boolean hasPreviousPage;//是否有下一页private boolean hasNextPage;//导航条中页码个数private int navigatePages;//所有导航条中显示的页号private int[] navigatepageNums;//导航条上的第一页页号private int navigateFirstPage;//导航条上的最后一页号private int navigateLastPage;

使用JsonPage返回结果

在这里插入图片描述
在这里插入图片描述

        <dependency>            <groupId>com.github.pagehelpergroupId>            <artifactId>pagehelperartifactId>            <version>5.2.0version>        dependency>

在这里插入图片描述

package cn.tedu.csmall.commons.restful;import com.github.pagehelper.PageInfo;import io.swagger.annotations.ApiModelProperty;import lombok.Data;import java.io.Serializable;import java.util.List;@Datapublic class JsonPage<T> implements Serializable {    // JsonPage 是用于同一代替 PageInfo 或 Page 这样分页查询结果类型的    // 其中要包含分页信息和查询到的数据两方面    // 我们这里只声明少量分页信息即可,实际开发中,有额外需要再添加额外属性    @ApiModelProperty(value = "总页数", name = "totalPages")    private Integer totalPages;    @ApiModelProperty(value = "总条数", name = "totalCount")    private Long totalCount;    @ApiModelProperty(value = "页码", name = "page")    private Integer page;    @ApiModelProperty(value = "每页条数", name = "pageSize")    private Integer pageSize;    // 还要声明一个属性保存查询到的数据    @ApiModelProperty(value = "分页数据", name = "list")    private List<T> list;    // 下面编写一个方法,能够将PageInfo类型对象转换为JsonPage类型对象返回    public static <T> JsonPage<T> restPage(PageInfo<T> pageInfo){        // 下面编写的是转换代码,要将pageInfo中相同意义的属性赋值到JsonPage对象中        JsonPage<T> jsonPage=new JsonPage<>();        jsonPage.setTotalPages(pageInfo.getPages());        jsonPage.setTotalCount(pageInfo.getTotal());        jsonPage.setPage(pageInfo.getPageNum());        jsonPage.setPageSize(pageInfo.getPageSize());        // 别忘了分页数据的复制过程        jsonPage.setList(pageInfo.getList());        // 最后返回转换完成的对象!        return jsonPage;    }}

在这里插入图片描述

// 声明返回 JsonPage 类型的分页查询订单的方法    JsonPage<Order> getAllOrdersByPage(Integer page, Integer pageSize);

csmall-order-webapi项目OrderServiceImpl实现类中进行修改

//     ↓↓↓↓↓↓↓↓public JsonPage<OrderTb> getAllOrdersByPage(Integer pageNum, Integer pageSize){    PageHelper.startPage(pageNum,pageSize);    List<OrderTb> list= orderMapper.findAllOrders();    //     ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓    return JsonPage.restPage(new PageInfo<>(list));}

业务逻辑层返回值的修改影响控制器方法的调用

再去修改OrderController中方法调用的位置

@Autowired//      ↓↓↓↓↓↓↓↓↓↓↓↓private IOrderService orderService;//...//                ↓↓↓↓↓↓↓↓public JsonResult<JsonPage<Order>> pageOrders(Integer pageNum, Integer pageSize){      // 分页调用      //↓↓↓↓↓↓        ↓↓↓↓↓↓↓↓↓        JsonPage<Order> jsonPage=orderService.getAllOrdersByPage(          pageNum,pageSize);      //↓↓↓↓↓↓↓↓↓↓      return JsonResult.ok("查询完成",jsonPage);}

保证启动Nacos\Seata

重启order测试

能出现查询结果即可

来源地址:https://blog.csdn.net/weixin_44807758/article/details/130419742

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯