Mybatis分页插件使用的详解[通俗易懂]

Mybatis分页插件使用的详解[通俗易懂]前言关于分页,一般来说rowBounds这种假分页都上不了台面,我们往往都选哟真分页,那么还不想搞得很麻烦,Mybatis的分页插件就为后端程序员解决了这个问题例子首先需要导入依赖,没错pagehelper<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><v

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

前言

关于分页,一般来说rowBounds 这种假分页都上不了台面,我们往往都选哟真分页,那么还不想搞得很麻烦,Mybatis的分页插件就为后端程序员解决了这个问题

例子

首先需要导入依赖, 没错pagehelper

    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.2.0</version>
    </dependency>

看看怎么用,首先我们不要条件,直接分
当然了我喜欢自己事先写一个page的实体类?

public class page<T> { 
   
    private int pageNumber;
    private int pageSize;
    private int total;
    private List<T> rows;

    private int pageCount;
        private int pre;
        private int next;
        private int start; //limit ?,?
        private boolean first;
        private boolean last;

    public int getPageCount() { 
   
        return (getTotal()+getPageSize()-1)/getPageSize();
    }

    public int getPre() { 
   
        if(getPageNumber()==1)
        return 1;
        return getPageNumber()-1;
    }

    public int getNext() { 
   
        if(getPageNumber()==getPageCount())
        return getPageCount();
        return getPageNumber()+1;
    }

    public int getStart() { 
   
        return (getPageNumber()-1)*pageSize;
    }


    public boolean isFirst() { 
   
        return getPageNumber()==1;
    }

    public boolean isLast() { 
   
        return getPageNumber()==getPageCount();
    }

    public int getPageNumber() { 
   
        return pageNumber;
    }

    public void setPageNumber(int pageNumber) { 
   
        this.pageNumber = pageNumber;
    }

    public int getPageSize() { 
   
        return pageSize;
    }

    public void setPageSize(int pageSize) { 
   
        this.pageSize = pageSize;
    }

    public int getTotal() { 
   
        return total;
    }

    public void setTotal(int total) { 
   
        this.total = total;
    }

    public List<T> getRows() { 
   
        return rows;
    }

    public void setRows(List<T> rows) { 
   
        this.rows = rows;
    }
}

Controller?

    @RequestMapping(value = "/querySome", method = RequestMethod.POST)
    @ResponseBody
    public ETResponse querySome(int pageNumber, int pageSize) { 
   
        List<Food> rows = service.querySome(pageNumber, pageSize);
        PageInfo<Food> info = new PageInfo<>(rows);//Pageinfo 是个Mybatis写的page
        page<Food> pa = new page<>();
        pa.setRows(info.getList());
        pa.setTotal(Integer.parseInt(info.getTotal() + ""));
        pa.setPageSize(pageSize);
        pa.setPageNumber(pageNumber);
        return sr.setResponse(pa,"200");
    }

流程就是

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}

查出结果集

创建Pageinfo的对象

组装我们自己的page对象

发送page

当然了,有没有简化版?这我还得自己建个类,
Controller

    @RequestMapping(value = "/querySome", method = RequestMethod.POST)
    @ResponseBody
    public ETResponse querySome(int pageNumber, int pageSize) { 
   
        List<Food> rows = service.querySome(pageNumber, pageSize);
        PageInfo<Food> info = new PageInfo<>(rows);//Pageinfo 是个Mybatis写的page
        return sr.setResponse(info,"200");//负责向前台发送response.data.data的方法
    }

是的没错,直接把pageinfo的对象传给前台也不是不行,因为它本身就是一个page对象,只是它里面的一些属性我们不是很清楚,
下面是pageInfo源码中的属性

private int pageNum;
    private int pageSize;
    private int size;
    private long startRow;
    private long 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;

我们发现好像没有我们的要的list结果集
我找了找在它父类中呢
在这里插入图片描述
在这里插入图片描述
很明显了吧,所以以后需要什么属性直接get也好
ok说了这么多,看看Service

 public List<Food> querySome(int pageNumber, int pageSize) { 
   
        PageHelper.startPage(pageNumber,pageSize);//负责分页
        return dao.querySome();//传空参给dao层
    }

Dao层+mapper.xml文件

 List<Food> querySome();
 <select id="querySome" resultType="food">
	select * from food
 </select>

那有条件查询的分页呢?
很简单我们只需要在Service中把条件给dao层就ok了

 public List<Food> querySome(String name,int pageNumber, int pageSize) { 
   
        PageHelper.startPage(pageNumber,pageSize);//负责分页
        return dao.querySome(name);//传空参给dao层
   }
 List<Food> querySome(String name);
 <select id="querySome" resultType="food">
	select * from food where name =#{ 
   name}
 </select>

总结

ok了MyBatis的分页插件学会了的话,记得给个赞哦~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184313.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java集合篇:HashMap原理详解(JDK1.7及之前的版本)

    Java集合篇:HashMap原理详解(JDK1.7及之前的版本)

    2021年10月4日
    33
  • Oracle提权[通俗易懂]

    Oracle提权[通俗易懂]三种方式1.普通用户模式:拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令2.DBA用户模式:(自动化工具)sqlmap–is-dba测试是否是dba权限拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试3.注入提升模式:(sqlmap)拥有一个oracle注入点,可以通过注入点执行系统命令,此种模式没有实现回显,需要自己验证。三种方式的提权工具…

    2022年9月26日
    1
  • tracert工作原理简述_tracert三个时间

    tracert工作原理简述_tracert三个时间linux上为tracerouteTracert 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。首先,tracert送出一个TTL是1的IP 数据包到目的地,当路径上的第一个路由器收到这个数据包时,它将TTL减1。此时,TTL变为0,所以该路由器会将此数据包丢掉,并送回一个「ICMPtimeexceeded」消息(包

    2022年9月25日
    2
  • 核与线程 CPU 4核8线程 的解释

    核与线程 CPU 4核8线程 的解释1 物理 CPU 物理 CPU 就是计算机上实际配置的 CPU 个数 在 linux 上可以打开 cat proc cpuinfo 来查看 其中的 physicalid 就是每个物理 CPU 的 ID 能找到几个 physicalid 就代表计算机实际有几个 CPU 在 linux 下可以通过指令 grep physicalid proc cpuinfo sort u wc l 来查看物理

    2025年7月22日
    4
  • java补码运算_java中的补码运算

    java补码运算_java中的补码运算publicclassTest2_8{/*补码运算*在计算机中,数值一率采用补码来运算,如:5-3实例上是5+(-3);*正数与负数的关系:取反再加1**/publicstaticvoidmain(Stringargs[]){intfive=5;intthree=-3;//从输出结果来看负数是用补码来存储的//输出5和-3的二进制码,最高位(最左边那位)为0表示正数,为1…

    2022年9月22日
    3
  • Redis之压缩列表ziplist

    Redis是基于内存的nosql,有些场景下为了节省内存redis会用“时间”换“空间”。ziplist就是很典型的例子。ziplist是list键、hash键以及zset键的底层实现之一(3.0之后list键已经不直接用ziplist和linkedlist作为底层实现了,取而代之的是quicklist)这些键的常规底层实现如下:list键:双向链表 hash键:字典di…

    2022年4月9日
    80

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号