- 一、在pom.xml文件中引入Pagehelper分页插件
- 二、yml中配置分页插件等:
- 三、数据库t_book:
- 四、实体类Book:
- 五、BookDao接口(即mapper接口):
- 六、sql映射文件:
- 七、service层:
- 八、controller:
- 九、postman测试:
- 拓展:
参考:
https://www.cnblogs.com/xifengxiaoma/p/11027551.html
https://blog.csdn.net/wu1997___/article/details/111478479
一、在pom.xml文件中引入Pagehelper分页插件注意:
我这里直接使用springboot在线模板创建的,即springboot2.6.0,
springboot2.6.0默认情况完全禁止Bean的循环引用,当我们使用依赖注入@Resource和@Autowired时候,直接启动报错,说出现循环依赖等英文。
解决方法:你也可以通过下面的配置,放开不允许循环依赖的要求:
spring.main.allow-circular-references=true
二、yml中配置分页插件等:4.0.0 org.springframework.boot spring-boot-starter-parent2.6.0 com.example springboot-mabtis-pagehelper0.0.1-SNAPSHOT springboot-mabtis-pagehelper Demo project for Spring Boot 1.8 mysql mysql-connector-java8.0.22 com.alibaba druid-spring-boot-starter1.1.17 org.mybatis.spring.boot mybatis-spring-boot-starter2.1.3 com.github.pagehelper pagehelper-spring-boot-starter1.2.5 org.springframework.boot spring-boot-starter-web2.5.0 org.projectlombok lombok1.18.22 org.springframework.boot spring-boot-starterorg.springframework.boot spring-boot-starter-testtest org.springframework.boot spring-boot-maven-plugin
pagehelper.helper-dialect=mysql pagehelper.params=count=countSql pagehelper.reasonable=true pagehelper.support-methods-arguments=true
或者yml:
server:
port: 8080
spring:
datasource: #数据源连接信息
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
main: #springboot2.6要开启允许循环依赖
allow-circular-references: true
#mybatis的配置
mybatis:
mapper-locations: classpath:mapper
//分页参数这里必须带(因为前端一定会传递分页的两个参数的),分页的本质就是在server层进行包装和执行
public PageInfo selectAllByPageInfo(Integer pageNum, Integer pageSize);
//动态条件查询加分页
public PageInfo selectByPageAndCondition(Integer pageNum, Integer pageSize,Book book);
}
service实现类:分页方法的返回值也是PageInfo:
package com.example.springboot.service.impl;
import com.example.springboot.dao.BookDao;
import com.example.springboot.entity.Book;
import com.example.springboot.service.BookService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookserviceImpl implements BookService {
@Autowired
private BookDao bookDao;
@Override
public PageInfo selectAllByPageInfo(Integer pageNum, Integer pageSize) {
//1.分页的开始页的分页设置,分页一定要至少传递这两个参数
PageHelper.startPage(pageNum, pageSize);
//2.紧跟分页设置的后的第一个select查询会被分页查询
List books = bookDao.selectAllByPage();
//3.PageInfo参数navigatepage(导航页,显示的页码):默认显示5个连续页,页码导航连续显示的页数5
PageInfo bookPageInfo = new PageInfo(books,5);
return bookPageInfo;
}
@Override
public PageInfo selectByPageAndCondition
(Integer pageNum, Integer pageSize, Book book) {
//1.分页助手开始分页
PageHelper.startPage(pageNum,pageSize);
//2.调用dao层的select查询方法,第一个select方法会被分页
List books = bookMaper.selectByPageAndCondition(book);
//3。封装分页结果到PageInfo中
PageInfo bookPageInfo = new PageInfo<>(books, 5);
return bookPageInfo;
}
}
八、controller:
package com.example.springboot.controller;
import com.example.springboot.entity.Book;
import com.example.springboot.service.BookService;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping(value = "/selectAllByPage" ,method = RequestMethod.GET)
public PageInfo selectAllByPage(
@RequestParam(required = true,defaultValue = "1",value ="pageNum" )Integer pageNum,
@RequestParam(required = false,defaultValue = "5",value = "pageSize")Integer pageSize){
if(pageNum==null){
pageNum=1;
}
if(pageSize==null){
pageSize=10;
}
PageInfo pageInfo = bookService.selectAllByPageInfo(pageNum, pageSize);
return pageInfo;
}
@ResponseBody //动态查询的分页
@RequestMapping(value = "/selectByPageAndCondition",method = RequestMethod.GET)
public PageInfo selectByPageAndCondition(
@RequestParam(value = "pageNum",required = true,defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize",required = false,defaultValue = "5") Integer pageSize,
Book book){
PageInfo bookPageInfo = bookService.selectByPageAndCondition(pageNum, pageSize, book);
return bookPageInfo;
}
}
九、postman测试:
数据库数据展示:
动态条件加分页的postman测试:
使用pageHelper插件来分页,只需在执行sql前用即可
String orderBy = 排序字段 + " desc";//按照(数据库)排序字段 倒序 排序
PageHelper.startPage(pageNum, pageSize, orderBy)
或者:
service实现类:
@Override
public PageInfo selectByPageAndCondition
(Integer pageNum, Integer pageSize,String orderBy, Book book) {
//1.分页助手开始分页
PageHelper.startPage(pageNum,pageSize);
PageHelper.orderBy(orderBy); //排序的方法 PageHelper.orderBy(String orderBy)
//2.调用dao层的select查询方法,第一个select方法会被分页
List books = bookMaper.selectByPageAndCondition(book);
//3。封装分页结果到PageInfo中
PageInfo bookPageInfo = new PageInfo<>(books, 5);
return bookPageInfo;
}
controller:
@ResponseBody //动态查询的分页
@RequestMapping(value = "/selectByPageAndCondition",method = RequestMethod.GET)
public PageInfo selectByPageAndCondition(
@RequestParam(value = "pageNum",required = true,defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize",required = false,defaultValue = "5") Integer pageSize,
@RequestParam(value = "orderBy",required = false) String orderBy,
Book book){
PageInfo bookPageInfo =
bookService.selectByPageAndCondition(pageNum, pageSize,orderBy, book);
return bookPageInfo;
}



