分页查询:pageHelper

本文介绍如何在Java开发中使用PageHelper插件进行分页查询。首先,文章详细阐述了分页查询的引入步骤,包括依赖导入、配置信息设置。接着,通过示例展示了分页查询的实现过程,特别是自定义Page类来封装分页结果,包括`records`(分页列表数据)和`total`(总记录数)。最后,提到了Controller和Service层的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


分页:插件pageHelper

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、 使用

1.导入依赖

<!--PageHelper分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.0</version>
</dependency>

2.在application.yml文件配置信息

pagehelper:
  # 自动获取方言
  auto-dialect: true
  # 合理化分页
  reasonable: true

3.测试(pageHelper的基本使用)

// 1、EmployeeMapper(添加一个findByPage方法)
public interface EmployeeMapper {

    List<Employee> findByPage(String name);
    
}
// 2、EmployeeMapper.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.mapper.EmployeeMapper">
    <select id="findByPage" resultType="com.itheima.reggie.entity.Employee">
        select * from employee
        <where>
            <if test="name != null and name != ''">
                and name like concat('%',#{name},'%')
            </if>
        </where>
    </select>
</mapper>
// 3、测试类
@SpringBootTest
public class PageHelperTest {

    @Autowired
    EmployeeMapper mapper;

    @Test
    public void test0() {
        int pageNum = 1;
        int pageSize = 2;
        String name = "to";

        //1.设置分页参数
        PageHelper.startPage(pageNum,pageSize);

        //2.调用mapper的查询操作(紧跟着上面设置分页参数的第一条查询语句会被自动分页)
        List<Employee> list = mapper.findByPage(name);

        //3.用pageInfo封装查询结果list 就可以获取所有的分页属性
        PageInfo<Employee> pageInfo = new PageInfo<>(list);
        System.out.println("总页数:"+pageInfo.getPages());
        System.out.println("当前页数据集合:"+pageInfo.getList());
        System.out.println("总记录数:"+pageInfo.getTotal());
        System.out.println("当前页:"+pageInfo.getPageNum());
        System.out.println("每页记录数:"+pageInfo.getPageSize());


    }
}

二、分页查询实现

1.引入库

3.4 分页查询实现

举例:具体的请求信息如下:

请求说明
请求方式GET
请求路径/employee/page
请求参数page , pageSize , name
响应
{“code”:1,“data”:page对象}

那么查询完毕后我们需要给前端返回什么样的结果呢?

查询返回的结果数据data中应该封装两项信息, 分别为: records 封装分页列表数据, total 中封装符合条件的总记录数。 那我们则需要自定义一个Page类必须包含records 与total两个属性的

Page实体类的编写

最好放在common包下.

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Page<T>  {
    private List<T> records;
    private long total;
}

EmployeeController控制器

@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

   

     /**
     * 作用: 员工列表分页
     * @param page  当前页
     * @param pageSize  页面大小
     * @param name  用户名
     * @return
     */
    @GetMapping("/page")
    public R<Page<Employee>> page(Integer page,Integer pageSize,String name){
        Page<Employee> pageResult=  employeeService.findByPage(page,pageSize,name);
        return R.success(pageResult);
    }
}

EmployeeService接口

;

public interface EmployeeService {
 
     /**
     * 作用: 员工列表分页
     * @param page  当前页
     * @param pageSize  页面大小
     * @param name  用户名
     * @return
     */
    Page<Employee> findByPage(Integer page, Integer pageSize, String name);
}

EmployeeServiceImpl接口实现类

@Service
public class EmployeeServiceImpl implements EmployeeService {


    @Autowired
    private EmployeeMapper employeeMapper;
  

   /**
     * 作用: 员工列表分页
     * @param page  当前页
     * @param pageSize  页面大小
     * @param name  用户名
     * @return
     */
    @Override
    public Page<Employee> findByPage(Integer page, Integer pageSize, String name) {
        //1. 设置当前页与页面大小
        PageHelper.startPage(page,pageSize);

        //2. 查询数据
        List<Employee> employeeList = employeeMapper.findByName(name);

        //3. 创建PageINfo对象,把list集合传入
        PageInfo<Employee> pageInfo = new PageInfo(employeeList);

        //4. 把pageinfo的信息转移到Page对象
        Page<Employee> pageResult = new Page<>(pageInfo.getList(),pageInfo.getTotal());

        return pageResult;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值