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()); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。