前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于SpringBoot实现SSMP整合的案例 (分页功能)

基于SpringBoot实现SSMP整合的案例 (分页功能)

原创
作者头像
心安事随
发布2024-08-07 21:43:22
1200
发布2024-08-07 21:43:22

概述:

  1. 使用IPage封装分页数据
  2. 分页操作依赖MyBatisPlus分页拦截器实现功能
  3. 借助MyBatisPlus日志查阅执行SQL语句

MyBatisPlus提供的分页操作API如下:

代码语言:java
复制
@Test

void testGetPage(){

    IPage page = new Page(2,5);

    bookDao.selectPage(page, null);

    System.out.println(page.getCurrent());

    System.out.println(page.getSize());

    System.out.println(page.getTotal());

    System.out.println(page.getPages());

    System.out.println(page.getRecords());

}

其中selectPage方法需要传入一个封装分页数据的对象,可以通过new的形式创建这个对象,这个对象也是MyBatisPlus提供的,别选错包了。创建此对象时需要指定两个分页的基本数据

  • 当前显示第几页
  • 每页显示几条数据

可以通过创建Page对象时利用构造方法初始化这两个数据。即:

代码语言:java
复制
IPage page = new Page(2,5);

将该对象传入到查询方法selectPage后,可以得到查询结果,但当前操作查询结果返回值仍然是一个IPage对象。

代码语言:java
复制
IPage page = bookDao.selectPage(page, null);

因为这个对象中封装了若干个数据,而查询的结果作为IPage对象封装的一个数据存在的,可以理解为查询结果得到后,又塞到了这个IPage对象中,其实还是为了高度的封装,一个IPage描述了分页所有的信息。

下面5个操作就是IPage对象中封装的所有信息了。

代码语言:java
复制
    System.out.println(page.getCurrent());    //当前页码值

    System.out.println(page.getSize());        //每页显示数

    System.out.println(page.getTotal());        //数据总量

    System.out.println(page.getPages());        //总页数

    System.out.println(page.getRecords());    //详细数据

到这里就知道这些数据如何获取了,但是当去执行这个操作时,实际上这个分页功能当前是无效的。这个要源于MyBatisPlus的内部机制:

对于MySQL的分页操作使用limit关键字进行,而并不是所有的数据库都使用limit关键字实现的,这个时候MyBatisPlus为了制作的兼容性强,将分页操作设置为基础查询操作的升级版。

基础操作中有查询全部的功能,而在这个基础上只需要升级一下就可以得到分页操作。所以MyBatisPlus将分页操作做成了一个开关,你用分页功能就把开关开启,不用就不需要开启这个开关。

这个开关是通过MyBatisPlus的拦截器的形式存在的。具体设置方式如下:

**定义MyBatisPlus拦截器并将其设置为Spring管控的bean**

代码语言:java
复制
//在此使用Spring管理第三方bean的方式把bean初始化且加载给Spring的环境

@Configuration//配置类注解

public class MPConfig {

    @Bean

    public MybatisPlusInterceptor mybatisPlusInterceptor(){

        //创建拦截器框架

        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        //给框架添加拦截器

        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());

        return interceptor;

    }

}

上述代码第一行是创建MyBatisPlus的拦截器栈,这个时候拦截器栈中没有具体的拦截器,第二行是初始化了分页拦截器,并添加到拦截器栈中。如果后期开发其他功能,需要添加全新的拦截器,按照第二行的格式继续add进去新的拦截器就可以了。

此时再测试分页功能:

代码语言:java
复制
@Test

void testGetPage(){

    IPage page = new Page(1,5);

    bookDao.selectPage(page,null);

}

日志:

代码语言:txt
复制
Creating a new SqlSession

SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@126a511] was not registered for synchronization because synchronization is not active

JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@c76167] will not be managed by Spring

==>  Preparing: SELECT COUNT(\*) AS total FROM tbl\_book

==> Parameters: 

<==    Columns: total

<==        Row: 13

<==      Total: 1

==>  Preparing: SELECT id,type,name,description FROM tbl\_book LIMIT ?

==> Parameters: 5(Long)

<==    Columns: id, type, name, description

<==        Row: 1, 计算机理论, Spring实战 第5版, Spring入门经典教程,深入理解Spring原理技术内幕

<==        Row: 2, 计算机理论, Spring 5核心原理与30个类手写实战, 十年沉淀之作,手写Spring精华思想

<==        Row: 3, 计算机理论, Spring 5 设计模式, 深入Spring源码剖析Spring源码中蕴含的10大设计模式

<==        Row: 4, 计算机理论, Spring MVC+MyBatis开发从入门到项目实战, 全方位解析面向Web应用的轻量级框架,带你成为Spring MVC开发高手

<==        Row: 5, 计算机理论, 轻量级Java Web企业应用实战, 源码级剖析Spring框架,适合已掌握Java基础的读者

<==      Total: 5

Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@126a511]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档