当前位置: 首页 > news >正文

Mybatis中的分页操作,如何使用PageHelper进行分页,以及Spring Boot整合Mybatis Plus分页

目的: 学会分页功能,学会分页方法
场景: 将下面的数据进行分页:

在这里插入图片描述

文章目录

      • Mybatis 单独使用分页(没有整合)
        • 1. PageHelper 插件
      • Spring Boot 整合 Mybatis Plus 使用分页
        • 1. selectPage 方法实现分页
        • 2. selectMapsPage 方法实现分页

Mybatis 单独使用分页(没有整合)

这部分的内容,没有整合,也就是纯粹在 Mybatis 中如何使用;整合的在后面

1. PageHelper 插件

在数据库中,我们知道,分页查询是在 sql 中使用 limit 语句。现在也可以在 xml 中使用,然后调方法的时候将参数传进去即可。

现在就开始介绍如何在 Mybatis 中使用这个插件:
1、引入依赖:

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

2、在配置文件 config.xml 中配置:

<configuration>
	<plugins>
		<!-- 添加分页拦截器查询 -->
		<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
	</plugins>
</configuration>

3、使用步骤如下:

public class Test{
	public static void main(String[] args){
		// 加载配置文件
		InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
		SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
		SqlSessionFactory factory = factoryBuilder.build(inputStream);
		SqlSession sqlSession = factory.openSession();

		// 获取mapper:根据自己的mapper修改
		AccountRepository repository =
		sqlSession.getMapper(AccountRepository.class);
		
		//使用步骤:
		//1. 一定要在查询前设置:第一个参数为当前页(从1开始),第二个参数为页的大小
		PageHelper.startPage(1,3);
		//2. 调查询所有的sql即可:根据自己的代码修改实体类
		List<Account> accountList = repository.findAll();
		for (Account account : accountList) {
			System.out.println(account);
		}
		// 关闭连接
		sqlSession.close();
	}
}

发现1: 上面只是将结果分页了,看不到任何其它数据,所以这里再设置下:

// 除了PageInfo,还可以用 Page:Page<Account> page = (Page<Account>) accountList;下面使用PageInfo 

PageHelper.startPage(1,3);
//2. 调查询所有的sql即可:根据自己的代码修改实体类
List<Account> accountList = repository.findAll();

//3. 保存分页其它信息,需要PageInfo对象
PageInfo<Account> pageInfo = new PageInfo<>(accountList);
System.out.println(pageInfo);
// 拿到结果中的数据信息
for (Account account : pageInfo.getList()) {
	System.out.println(account);
}

// 关闭连接
sqlSession.close();

在这里插入图片描述
发现2: PageHelper 是物体分页,也就是真分页(也就是有 limit)。还有的是逻辑分页,也就是假分页(把所有数据都查出来了,然后再分页给你)

Spring Boot 整合 Mybatis Plus 使用分页

这里介绍整合 MP 如何使用分页

1、在实现分页查询时,需要写一个配置类,这样系统会自动实现分页的操作:
在这里插入图片描述

@Bean
public PaginationInnerInterceptor page(){
	return new PaginationInnerInterceptor();
}

2、先看看查询的方法:

在这里插入图片描述
3、详细介绍分析:

1. selectPage 方法实现分页
@Test
void pageSelect(){
	//创建一个Page对象: 第一个参数:当前页 第二个参数:每页的记录数
	Page<User> page = new Page<>(1,2);
	
	//直接调方法:selectPage,返回的是Page对象的结果
	Page<User> result = userMapper.selectPage(page, null);
	
	System.out.println(result.getSize()); //拿到 每页的记录数
	System.out.println(result.getCurrent()); //拿到 当前页
	System.out.println(result.getPages()); //拿到 总页数
	System.out.println(result.getTotal()); // 拿到 总记录数
	
	result.getRecords().forEach(System.out::println); //拿到 数据,并输出
}

问题: 运行发现分页不生效,原因:配置类没有生效。
解决: 可以按照乐观锁的配置类来排除错误:先将这 PaginationInnerInterceptor 换成 PaginationInterceptor ,发现还是不行。

所以正确的配置类为:

@Configuration
public class PageConfig {

	//旧版本写法,对于新版本不生效
	@Bean
	public PaginationInnerInterceptor page(){
		return new PaginationInnerInterceptor();
	}
	//Mybatis Plus版本不同,有的需要将PaginationInnerInterceptor写成PaginationInterceptor
	
	//3.4.0后新版本写法
	@Bean
	public MybatisPlusInterceptor page(){
		MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
		mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
		return mybatisPlusInterceptor;
	}
}
2. selectMapsPage 方法实现分页

结果被 Map 集合封装了

在这里插入图片描述

@Test
void pageSelect(){
	Page<Map<String,Object>> page1 = new Page<>(1,2);
	Page<Map<String, Object>> result1= userMapper.selectMapsPage(page1, null);
	result1.getRecords().forEach(System.out::println);
}

至此!文章结束,后续有啥关于分页的,继续更新

相关文章:

  • Flink深入浅出之02:编程模型、数据源、算子、connector
  • 单片机中的基础外设GPIO的知识和应用—(6)
  • 门面设计模式和适配器模式有什么区别
  • 接口测试之curl命令详解
  • 自注意力机制的演进-从Transformer架构到DeepSeek-R1模型的深度语义理解革新
  • 双足机器狗开发:Rider - Pi
  • Wireshark的OSPF报文抓包和分析(单区域ospf实验)
  • 写一写idea中使用tomcat启动activiti过程
  • docker目录挂载与卷映射的区别
  • C语言学习笔记(week2)2-24 3-2
  • 【音视频】ffplay播放控制
  • LangChain教程 - Agent - 支持 9 种 ReAct 交互
  • 数字逻辑与FPGA实现基础
  • k-Shape:高效准确的聚类方法
  • VPC2-多域攻击-tomcat渗透-通达oa-域控提权-密码喷射-委派攻击-数据库提权
  • 人工智能 模型中D*算法的逻辑
  • 云存储的安全性之代理IP如何确保文件不被未授权访问
  • 杨校老师课堂之零基础入门C++备战信息学奥赛-基础篇
  • C++入门——命名空间
  • django中视图作用和视图功能 以及用法
  • 上海专业做网站较好的公司/网店推广的作用是什么
  • 东莞定制网站建设/什么是seo如何进行seo
  • 代运营3000一个月靠谱吗/西安网站seo服务
  • 外贸做网站的好处/中国2022年重大新闻
  • 苏州网站快速排名优化/培训机构在哪个平台找
  • 怎么将网站做成html/广东疫情最新消息今天