Mybatis分页功能

简介: Mybatis分页功能

分页插件



添加依赖


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


配置插件


<plugins>
  <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>


分页插件的使用


几种须知的条件


limit index, pageSize

index : 当前页的起始索引

pageSize : 每页显示的数据条数

pageNum : 当前页的页码

count :总记录数

totalPage :总页数 totalPage = count / pageSize

//如果从记录数 / 每页显示的数据 结果无法整除
//这种情况就是还有几条多余的数据无法显示,需要我们自己再添加一页进行显示
if(count % pagesize != 0){
    totalPage += 1;
}


举例说明:

pageSize  = 4 ,pageNum = 1, index= 0   limit 0 ,4
 pageSize  = 4 ,pageNum = 3, index= 8   limit 8 ,4
 pageSize  = 4 ,pageNum = 6, index= 20   limit 20 ,4
//每页显示4条数据 ,如果当前页为1 , 那么数据的索引就是从0开始 ,limit后面的数据就是从0 开始,页面显示数据为4条
//每页显示4条数据 ,如果当前页为3 , 那么数据的索引就是从前两页显示完后的数据(需要显示的数据就是从9 - 12),也就是从2*4=8开始 ,limit后面的数据就是从8开始,页面显示数据为4条
//每页显示4条数据 ,如果当前页为6 , 那么数据的索引就是从前两页显示完后的数据(需要显示的数据就是从21 - 24),也就是从5*4=20开始 ,limit后面的数据就是从20开始,页面显示数据为4条


list.forEach(System.out::println);列表查询


PageInfo中的属性


public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    private int pageNum;    //当前页的页码
    private int pageSize; //每页显示的数据
    private int size;  //当前页显示的真实条数
    private int startRow; //当前页从第几行开始 
    private int endRow;  //当前页从而几行结束
    private long total;  //总共有多少条数据
    private int pages;  //总共页数
    private List<T> list; //存储的数据
    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;


后端


开启分页显示

@RequestMapping("/list/{pageNum}")
public String pageStart(@PathVariable("pageNum") Integer pageNum, Model model){
    PageInfo<employee> page = employeeService.Page(pageNum);
    List<employee> list = page.getList();
    model.addAttribute("list",list);
    model.addAttribute("page",page);
  return "list";
}

在service层中开启分页以及获取数据,然后将数据回显到controller层


@Override
public PageInfo<employee> Page(Integer pageNum) {
    //开启分页功能,每页显示8条数据
    PageHelper.startPage(pageNum,8);
    List<employee> list = EmpMapper.selectAll();
    for(employee li : list){
        dept dept = DeptMapper.selectByPrimaryKey(li.getDeptId());
        li.setDep(dept);
    }
    PageInfo<employee> pageInfo = new PageInfo<>(list,4);
    return pageInfo;
}


前端


<!--分页的相关功能-->
<div style="text-align: center" >
    <!--判断是否有前一页-->
    <span th:if="${page.hasPreviousPage}">
        <a class="btn btn-sm btn-primary"  th:href="@{/list/1}">首页</a>
        <a class="btn btn-sm btn-primary"  th:href="@{'/list/' + ${page.prePage}}">上一页</a>
    </span>
    <!--显示需要展示的页码范围 ,通过navigatepage 来进行设置范围-->
    <span th:each="num : ${page.navigatepageNums}">
        <a class="btn btn-sm btn-primary"  th:if="${page.pageNum==num}" th:href="@{'/list/'+${num}}" th:text="'['+${num}+']'" style="color:#d51313;"></a>
        <a class="btn btn-sm btn-primary"  th:if="${page.pageNum!=num}" th:href="@{'/list/'+${num}}" th:text="${num} "></a>
    </span>
    <!--判断是否有下一页数据-->
    <span th:if="${page.hasNextPage}">
        <a class="btn btn-sm btn-primary"  th:href="@{'/list/'+${page.nextPage}}">下一页</a>
        <a class="btn btn-sm btn-primary"  th:href="@{'/list/'+${page.pages}}">末页</a>
    </span>
</div>


通过超链接发送请求的参数,然后通过与controller请求映射进行匹配,从而将请求发送至后端来处理


目录
相关文章
|
2月前
|
SQL Java 数据库连接
MyBatis分页
MyBatis作为Java持久层框架,需结合数据库特性或插件实现分页。分页分为物理分页(如MySQL的LIMIT)和逻辑分页(内存截取),推荐使用PageHelper插件自动注入分页语句,提升开发效率与性能。需注意索引优化、深分页问题及多表关联时的兼容性,结合业务场景选择合适方案。
109 4
|
8月前
|
SQL Java 数据库连接
微服务——MyBatis分页
本文介绍了分页的多种实现方式,包括自带RowBounds分页、第三方插件PageHelper分页、SQL分页、数组分页及拦截器分页。其中,RowBounds是先查询全部结果再内存分页;PageHelper通过修改SQL动态添加分页关键字;SQL分页依赖数据库自身的分页功能如`LIMIT`;数组分页则是查询全量数据后用`subList`方法截取;拦截器分页则统一在SQL后添加分页语句。最后总结逻辑分页适合小数据量,但大数据量易内存溢出;物理分页虽小数据量效率较低,但更适合大数据场景,优先推荐使用。
102 0
|
8月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
|
6月前
|
SQL Java 数据安全/隐私保护
发现问题:Mybatis-plus的分页总数为0,分页功能失效,以及多租户插件的使用。
总的来说,使用 Mybatis-plus 确实可以极大地方便我们的开发,但也需要我们理解其工作原理,掌握如何合适地使用各种插件。分页插件和多租户插件是其中典型,它们的运用可以让我们的代码更为简洁、高效,理解和掌握好它们的用法对我们的开发过程有着极其重要的意义。
594 15
|
9月前
|
XML SQL Java
十二、MyBatis分页插件
十二、MyBatis分页插件
222 17
|
9月前
|
监控 安全 数据库
【YashanDB 知识库】Mybatis-Plus 调用 YashanDB 怎么设置分页
数据库状态分为正常与异常两种情况。当出现异常时,首先查看告警列表确认问题(如实例无法连接),并尝试用数据库用户名和密码登录。若能登录,说明主实例故障已切换至备库;若无法登录或为单节点,则需进一步排查。接着检查监控项,若有数据表明主实例故障,无数据则可能是通信中断。随后检查主机上的服务是否存在,若存在但通信受限,需排查安全设置或网络;若服务不存在,可能因重启或断电导致,需手动启动相关服务。最终在YashanDB列表中确认状态恢复。
|
8月前
|
SQL Java 关系型数据库
MyBatis篇-分页
本文介绍了多种分页方式,包括自带rowbound内存分页、第三方插件pagehelper(通过修改SQL实现分页)、SQL分页(依赖limit或rownum等关键字)、数组分页(先查询全部数据再用subList分页)、拦截器分页(自定义拦截器为SQL添加分页语句)。最后总结了逻辑分页(内存分页,适合小数据量)和物理分页(直接在数据库层面分页,适合大数据量)的优缺点,强调物理分页优先于逻辑分页。
|
8月前
|
SQL Java 数据库连接
MyBatis 实现分页的机制
MyBatis 的分页机制主要依赖于 `RowBounds` 对象和分页插件。`RowBounds` 实现内存分页,适合小数据量场景,通过设定偏移量和限制条数对结果集进行筛选。而针对大数据量,则推荐使用分页插件(如 PageHelper),实现物理分页。插件通过拦截 SQL 执行,动态修改语句添加分页逻辑,支持多种数据库方言。配置插件后,无需手动调整查询方法即可完成分页操作,提升性能与灵活性。
159 0
|
8月前
|
Oracle 关系型数据库 Java
|
9月前
|
Oracle 关系型数据库 MySQL
【YashanDB 知识库】Mybatis-Plus 调用 YashanDB 怎么设置分页
**Mybatis-Plus 自动分页配置问题简介** Mybatis-Plus 是 Mybatis 的增强工具,简化 CRUD 操作并适配多种数据库,包括 YashanDB。自动分页配置错误会导致应用开发受影响。解决方法:1. 配置 pagehelper 为 oracle 或 mysql;2. 设置分页拦截器为 oracle 或 mysql。确保返回设置后的对象。正确配置后可在 service 层使用 page 方法实现自动分页。
下一篇
开通oss服务