前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot 集成 MybatisPlus 四——分页查询

SpringBoot 集成 MybatisPlus 四——分页查询

原创
作者头像
用户8100582
发布2023-11-01 22:30:18
9780
发布2023-11-01 22:30:18
举报
文章被收录于专栏:Java多线程Java多线程

0 插入数据

因之前删除了部分数据,要体现分页查询的效果,最好添加一些数据。

1 增加插件

在项目中创建一个配置类,在其中增加 MybatisPlus 中用于分页查询的插件,并引入相关类。

因为不同的数据库,用于分页的关键字也有差异,所以需要指定数据库类型:DbType.MYSQL

需要在类及方法上添加注解,否则不会被 SpringBoot 扫描到。

类名上添加注解 @Configuration,方法上添加注解 @Bean

代码语言:java
复制
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConfigureUtil {

    //配置分页插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

2 执行查询

2.1 selectPage() 方法查询

在执行查询时,可以调用 selectPage() 方法,该方法中需要使用 Page 对象及 QueryWrapper 对象。

在 Page 对象中,可以指定分页查询时的当前页号、每页条数等信息。如果当前页号是0或者1时,查询的结果都是第1页的内容。

在 QueryWrapper 对象中,可以指定查询条件,这个和普通查询是一样的用法。

例如:查询所有用户中 remark 内容包含 “老师” 的记录:

代码语言:java
复制
//分页查询
@Test
public void selectUserByPage(){
    Page<User> page = new Page<>(2, 2);
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.like("remark", "老师");
    IPage<User> iPage = userMapper.selectPage(page, wrapper);
    //总页数
    System.out.println(iPage.getPages());
    //总条数
    System.out.println(iPage.getTotal());
    //每页条数
    System.out.println(iPage.getSize());
    //当前页的结果集
    System.out.println(iPage.getRecords());
    //当前页号
    System.out.println(iPage.getCurrent());
}

在控制台中可以看到,实际执行了两次查询:

第一次是查询的总条数;

第二次是使用了 limit 关键字进行分页查询。

==> Preparing: SELECT COUNT(*) AS total FROM user WHERE (remark LIKE ?)

==> Parameters: %老师%(String)

<== Columns: total

<== Row: 5

<== Total: 1

==> Preparing: SELECT id,username,gendar,remark FROM user WHERE (remark LIKE ?) LIMIT ?,?

==> Parameters: %老师%(String), 2(Long), 2(Long)

<== Columns: id, username, gendar, remark

<== Row: 10, 张三, 女, 体育老师

<== Row: 11, 刘能, 男, 演讲老师

<== Total: 2

结果输出:

3

5

2

User{id=10, username='张三', gendar='女', remark='体育老师'}, User{id=11, username='刘能', gendar='男', remark='演讲老师'}

2

2.2 selectMapsPage() 方法查询

查询时,调用了 selectMapsPage() 方法,该方法中仍然需要使用 Page 对象及 QueryWrapper 对象。

selectPage() 方法不同的是,这里的 Page 对象必须是 Page<Map<String , Object>>,泛型必须是 Map<String , Object>。QueryWrapper 对象的使用没有差别。

查询的结果也同样是一个 IPage<Map<String, Object>> 泛型类型的对象。

代码语言:java
复制
//分页查询
@Test
public void selectUserByPage2(){
    Page<Map<String , Object>> mapPage = new Page<>(2 , 2 );
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.like("remark", "老师");
    IPage<Map<String, Object>> iPage = userMapper.selectMapsPage(mapPage, wrapper);
    //总页数
    System.out.println("总页数: " + iPage.getPages());
    //总条数
    System.out.println("总条数: " + iPage.getTotal());
    //每页条数
    System.out.println("每页条数: " + iPage.getSize());
    //当前页的结果集
    System.out.println("当前页的结果集: " + iPage.getRecords());
    //当前页号
    System.out.println("当前页号: " + iPage.getCurrent());
}

控制台输出可以看到,该方法同样进行了两次查询:

==> Preparing: SELECT COUNT(*) AS total FROM user WHERE (remark LIKE ?)

==> Parameters: %老师%(String)

<== Columns: total

<== Row: 5

<== Total: 1

==> Preparing: SELECT id,username,gendar,remark FROM user WHERE (remark LIKE ?) LIMIT ?,?

==> Parameters: %老师%(String), 2(Long), 2(Long)

<== Columns: id, username, gendar, remark

<== Row: 10, 张三, 女, 体育老师

<== Row: 11, 刘能, 男, 演讲老师

<== Total: 2

结果输出:

总页数: 3

总条数: 5

每页条数: 2

当前页的结果集: {gendar=女, remark=体育老师, id=10, username=张三}, {gendar=男, remark=演讲老师, id=11, username=刘能}

当前页号: 2

与第一种查询结果集不同,因为得到的是Map,因此结果集中字段的位置并不固定。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0 插入数据
  • 1 增加插件
  • 2 执行查询
    • 2.1 selectPage() 方法查询
      • 2.2 selectMapsPage() 方法查询
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档