[Java2023] Day10-(7,8节)-分页查询的实现

98 阅读1分钟

分页查询思路

image.png

代码实现

    1. 封装一个PageBean类, 用来返回分页列表数据
package com.tlias.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;

/**
 * 分页查询结果封装类
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {

    private Long total;//总记录数
    private List rows;//数据列表
}
  • 2.在控制器中定义Http接口
package com.tlias.controller;

import com.tlias.pojo.PageBean;
import com.tlias.pojo.Result;
import com.tlias.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;

@Slf4j
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;

    @GetMapping("/emps")
    public Result page(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize
    )
    {
        log.info("分页查询, 参数: {}, {}", page, pageSize);
        PageBean pageBean = empService.page(page, pageSize);
        return Result.success(pageBean);
    }

}
  • 3.在Service中定义接口类
package com.tlias.service;

import com.tlias.pojo.PageBean;

public interface EmpService {
    PageBean page(Integer page, Integer pageSize);
}
  • 4.接口实现类中实现分页方法, 调用DAO层的Mapper
package com.tlias.service.impl;

import com.tlias.mapper.EmpMapper;
import com.tlias.pojo.Emp;
import com.tlias.pojo.PageBean;
import com.tlias.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EmpServiceImpl implements EmpService {

    @Autowired
    private EmpMapper empMapper;


    @Override
    public PageBean page(Integer page, Integer pageSize) {

        // 1.获取总记录数
        Long count = empMapper.count(); // 总数目

        // 2.获取分页结果列表
        Integer start = (page - 1) * pageSize;
        List<Emp> empList = empMapper.page(start, pageSize);

        // 3.封装pageBean
        PageBean pageBean = new PageBean(count, empList);

        return pageBean;
    }
}
  • 5.Mapper(DAO层) 查询数据库
package com.tlias.mapper;

import com.tlias.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface EmpMapper {

    @Select("SELECT count(*) from emp")
    public Long count();

    @Select("SELECT * from emp limit #{start},#{pageSize}")
    public List<Emp> page(Integer start, Integer pageSize);
}