MyBatis的分页插件PageHelper实现分页查询

73 阅读1分钟

1、导入依赖

 <dependency>
     <groupId>com.github.pagehelper</groupId>
     <artifactId>pagehelper-spring-boot-starter</artifactId>
     <version>1.4.6</version>
 </dependency>

2、配置拦截器插件(可以不写)

Spring Boot 引入 starter 后自动生效,对分页插件进行配置时,在 Spring Boot 对应的配置文件 application.[properties|yaml] 中配置:

 pagehelper:
   propertyName: propertyValue
   reasonable: false
   defaultCount: true # 分页插件默认参数支持 default-count 形式,自定义扩展的参数,必须大小写一致

3、编写代码

3.1 设计DTO类

 @Data
 public class UserPageQueryDTO implements Serializable {
 ​
     //用户姓名
     private String name;
 ​
     //页码
     private int page;
 ​
     //每页显示的记录数
     private int pageSize;
 }

3.2 封装PageResult类

 @Data
 @AllArgsConstructor
 @NoArgsConstructor
 public class PageResult implements Serializable {
 ​
     private long total; //总记录数
 ​
     private List records; //当前页数据集合
 }

3.3 设计统一结果返回类Result(略)

3.4 Controller

 @RestController
 @RequestMapping("/user")
 @Api(tags = "员工管理")
 public class UserController {
 ​
     @Autowired
     private UserService userService;
 ​
     @GetMapping("/page")
     @ApiOperation("用户分页查询")
     public Result<PageResult> page(UserPageQueryDTO userPageQueryDTO) {
         PageResult pageResult = userService.page(userPageQueryDTO);
         return Result.success(pageResult);
     }
 }

3.5 Service

 public interface UserService {
     PageResult page(UserPageQueryDTO userPageQueryDTO);
 }
 ​
 ​
 // 实现类
 @Service
 public class UserServiceImpl implements UserService {
 ​
     @Autowired
     private UserMapper userMapper;
 ​
     @Override
     public PageResult page(UserPageQueryDTO userPageQueryDTO) {
         PageHelper.startPage(userPageQueryDTO.getPage(), userPageQueryDTO.getPageSize());
 ​
         Page<User> page = userMapper.pageQuery(userPageQueryDTO);
 ​
         long total = page.getTotal();
         List<User> employeeList = page.getResult();
 ​
         return new PageResult(total, employeeList);
     }
 }

3.6 Mapper

 @Mapper
 public interface UserMapper {
     Page<User> pageQuery(UserPageQueryDTO userPageQueryDTO);
 }
 ​
 // UserMapper.xml文件
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.itheima.mapper.UserMapper">
     <!--    员工分页查询-->
     <select id="pageQuery" resultType="com.itheima.pojo.entity.User">
         select * from user
         <where>
             <if test="name != null and name != ''">
                 name like concat('%', #{name}, '%')
             </if>
         </where>
         order by created_time desc
     </select>
 </mapper>

4、编写XML文件扫描配置

 mybatis:
   mapper-locations: classpath*:mapper/**/*.xml