4、PageHelper分页查询
2024-09-18 05:29:23
1、MyBatis的分页方式:
逻辑分页与物理分页
1、逻辑分页:使用MyBatis自带的RowBounds进行分页,是一次性查询很多数据,然后再在结果中检索分页的数据。这样做弊端是需要消耗大量的内存、有内存溢出的风险、对数据库压力较大。
2、物理分页:使用分页插件PageHelper或者自己写sql分页(limit),是从数据库查询指定条数的数据,弥补了一次性全部查出的所有数据的种种缺点,比如需要大量的内存,对数据库查询压力较大等问题。
2、PageHelper的原理:
PageHelper是MyBatis提供的分页插件;首先是在Mybatis里面配置了分页拦截器(PageInterceptor),即在执行相关Sql之前会拦截做一点事情;通过setLocalPage()方法,将分页信息保存在当前线程中。查询方法与之处于同一个线程中,共享ThreadLocal中的数据。selectlist查询之后赋值给的List list。这个list是Page 类型。再将list放到PageInfo<>中即可。
3、PageHelper分页实现:
(1)、建工程:
建立Springboost工程;
(2)、改POM:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <!--SpringBoot框架web项目起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<optional>true</optional>
</dependency> <!--PageHelper插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
</dependencies>
(3)、写YML:
server:
port: 8081 spring:
application:
name: pagehelperdemo
datasource:
type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型
driver-class-name: org.gjt.mm.mysql.Driver #mysql驱动包
url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
druid:
test-while-idle: false #关闭空闲检测 mybatis:
mapperLocations: classpath:mapper/*.xml #resources下建mapper包
(4)、业务类:
//实现类
@Autowired
private PageDemoMapper pageDemoMapper; /**
* PageHelper分页查询
* @Param pageNum:页数
* @Param pageSize:每页显示的条目
* */
@Override
public PageInfo<PageDemo> selectPage(Integer pageNum , Integer pageSize) {
log.info("页数:"+pageNum);
log.info("每页显示的条目:"+pageSize);
//查询数据库的时候会自动加上limit
//PageDemoMapper: List<PageDemo> selectAllDemo();
return PageHelper.startPage(pageNum, pageSize)
.doSelectPageInfo(() -> pageDemoMapper.selectAllDemo());
}
最新文章
- 9个让人印象深刻的网站 JS 视觉效果
- 利用python的双向队列(Deque)数据结构实现回文检测的算法
- JS魔法堂:IMG元素加载行为详解
- ecshop 活动-》红包
- CentOS6.4 安装MongoDB
- 异步SRAM控制器的Verilog建模
- MINIX3 进程通信分析
- SkinPP for VC
- 设置html滚动条(陶庭飞问题)
- Poco之ftp目录切换与创建
- float
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会( dp + dfs )
- MongoDB和Java-PHP
- assert BOOST_ASSERT的坑
- StreamSocket
- 【Java基础】10、Java中throw和throws的区别
- 目标检测的图像特征提取之(一)HOG特征(转)
- R语言—统计结果输出至本地文件方法总结
- lua 的 table 处理
- 瘋子C语言笔记 (string)