员工列表查询-分页查询-PageHelper插件-注意事项

目录

1. 背景介绍

2. Maven 依赖(pom.xml)

3. 配置项(application.properties)

4. 核心代码示例

4.1 Controller 层(Java)

4.2 Service 层(Java)

4.3 Mapper 接口(Java)

4.4 Mapper XML (MyBatis)

5. 注意事项小结

6. 运行结果演示


以下是一篇面向“JavaWeb 使用 PageHelper 分页插件注意事项”简单介绍,包含完整可复制的代码示例、依赖提示、运行结果说明及文件名标注。


1. 背景介绍

在 JavaWeb 项目中,数据分页查询是常见需求。PageHelper(基于 MyBatis)可以让我们**“零侵入”**地在代码中实现分页。本文将演示如何快速引入并使用,并提示几个常见注意事项,帮助同学们快速上手。


2. Maven 依赖(pom.xml)

提示:以下内容为 Maven 配置,标注为 XML 类型,放在项目根目录的 pom.xml 中。



    
    
        org.mybatis
        mybatis
        3.5.13
    
    
    
        org.mybatis.spring
        mybatis-spring
        2.0.8
    
    
    
        com.github.pagehelper
        pagehelper-spring-boot-starter
        1.4.6
    
    
    
        org.springframework
        spring-webmvc
        5.3.30
    
    


3. 配置项(application.properties)

提示:以下为 Spring Boot 环境下的配置,如非 Spring Boot,请在 XML 中配置 PageHelper 插件。

# 文件:src/main/resources/application.properties
# 开启 PageHelper 参数支持
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
  • helperDialect:根据数据库类型设置,比如 mysqloracle

  • reasonable:页码 ≤0 时,查询第一页;页码 大于总页数时,查询最后一页;

  • supportMethodsArguments:在 Mapper 方法参数上支持分页参数;

  • params:指定 count 查询别名。


4. 核心代码示例

下面以一个“用户列表分页”功能为例,完整给出 Controller → Service → Mapper → XML 四层代码。

4.1 Controller 层(Java)

// 文件:src/main/java/com/example/controller/UserController.java
package com.example.controller;

import com.example.entity.User;
import com.example.service.UserService;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    /** 
     * GET /users?page=1&size=5 
     * 返回用户分页数据 
     */
    @GetMapping
    public PageInfo list(
        @RequestParam(defaultValue = "1") int page,
        @RequestParam(defaultValue = "10") int size) {
        return userService.getUserPage(page, size);
    }
}

4.2 Service 层(Java)

// 文件:src/main/java/com/example/service/UserService.java
package com.example.service;

import com.example.entity.User;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface UserService {
    PageInfo getUserPage(int pageNum, int pageSize);
}

// 文件:src/main/java/com/example/service/impl/UserServiceImpl.java
package com.example.service.impl;

import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
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 UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public PageInfo getUserPage(int pageNum, int pageSize) {
        // 注意事项①:PageHelper.startPage 必须紧贴在查询方法前
        PageHelper.startPage(pageNum, pageSize);
        List list = userMapper.selectAll();
        // 注意事项②:需要用 PageInfo 包装查询结果
        return new PageInfo<>(list);
    }
}

4.3 Mapper 接口(Java)

// 文件:src/main/java/com/example/mapper/UserMapper.java
package com.example.mapper;

import com.example.entity.User;
import java.util.List;

public interface UserMapper {
    List selectAll();
}

4.4 Mapper XML (MyBatis)




    


5. 注意事项小结

  1. PageHelper.startPage 必须与查询紧邻,否则会分页不生效,导致全表查询。

  2. 每次分页前都要调用 startPage,同一个线程多次查询时需每次都调用。

  3. 使用 PageInfo 包装结果,可获取 totalpageshasNextPage 等属性,便于前端展示。

  4. 合理配置 reasonable,避免非法页码造成空数据;必要时自行校验页码范围。

  5. 静默模式 vs. 报错模式:默认 silent 模式(非法页码时返回空),可自定义拦截器日志。


6. 运行结果演示

假设数据库有 23 条用户记录,访问:

GET http://localhost:8080/users?page=3&size=10

响应 JSON(部分示例)

{
  "pageNum": 3,
  "pageSize": 10,
  "size": 3,
  "startRow": 21,
  "endRow": 23,
  "total": 23,
  "pages": 3,
  "list": [
    {"id":21,"username":"user21","email":"[email protected]"},
    {"id":22,"username":"user22","email":"[email protected]"},
    {"id":23,"username":"user23","email":"[email protected]"}
  ],
  "hasNextPage": false,
  "hasPreviousPage": true
}

标注:以上内容为服务端在控制台打印的完整 JSON,文件名无需另外标注。


以上示例简单明了,包含全部 Java 代码、XML 配置、依赖和注意事项。读者可直接复制到项目中运行并调整 Dialect、Bean 包路径等配置,快速实现分页功能。希望对大家有帮助!

你可能感兴趣的:(spring,spring,boot,mybatis,java,后端,数据库)