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());
}

最新文章

  1. 9个让人印象深刻的网站 JS 视觉效果
  2. 利用python的双向队列(Deque)数据结构实现回文检测的算法
  3. JS魔法堂:IMG元素加载行为详解
  4. ecshop 活动-》红包
  5. CentOS6.4 安装MongoDB
  6. 异步SRAM控制器的Verilog建模
  7. MINIX3 进程通信分析
  8. SkinPP for VC
  9. 设置html滚动条(陶庭飞问题)
  10. Poco之ftp目录切换与创建
  11. float
  12. BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会( dp + dfs )
  13. MongoDB和Java-PHP
  14. assert BOOST_ASSERT的坑
  15. StreamSocket
  16. 【Java基础】10、Java中throw和throws的区别
  17. 目标检测的图像特征提取之(一)HOG特征(转)
  18. R语言—统计结果输出至本地文件方法总结
  19. lua 的 table 处理
  20. 瘋子C语言笔记 (string)

热门文章

  1. 二手商城集成jwt认证授权
  2. SpringBoot 2.5.5整合轻量级的分布式日志标记追踪神器TLog
  3. C语言编译环境中的 调试功能及常见错误提示
  4. Windows Server 2012部署遇到的问题
  5. 【JavaWeb】学习笔记——JSP
  6. SQL--插入单引号值
  7. 十八、Service的应用
  8. .net core Blazor+自定义日志提供器实现实时日志查看器
  9. 精简docker的导出镜像
  10. pycharm系列---django