基本分页查询

109 阅读2分钟

基本分页查询

1 要求

1.1 请求

请求路径:/emps

请求方式:GET

接口描述:该接口用于员工列表数据的条件分页查询

样例: /emps?name=张&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=10

1.2 响应

参数格式:application/json

{
  "code": 1,
  "msg": "success",
    //这里的data是个由页数和内容组成的bean
  "data": {
    "total": //总页数,
    "rows": [
      //具体分页内容
    ]
  }
}

2 实现

2.1 构建框架

image-20230913115347664转存失败,建议直接上传图片文件

2.2 编写配置文件

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mySQL://localhost:3306/webapp
    username: root
    password: root
mybatis:
  configuration:
  //开启log
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    //自动驼峰
    map-underscore-to-camel-case: true

2.3 在pom中添加pageHelper依赖

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

2.4 添加Emp类 (省略)

2.5 添加Response格式

//lombok
@Data
@AllArgsConstructor
@NoArgsConstructor

public class Result {
    private Integer code;
    private String msg;
    private Object data;

    public static Result success(){
        return new Result(1,"success",null);
    }

    public static Result success(Object obj){
        return new Result(1,"success",obj);
    }

    public static Result failed(){
        return new Result(2,"failed",null);
    }
}

2.6 添加pageBean类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
    private long total;
    private Object rows;
}

2.7 添加Controller

​ 此处Integer用@RequestParam() 需在括号中添加 Required = false, 否则出现 Integer cannot be null错

//控制反转IOC Inversion of Control
@RestController
@RequestMapping("emps")
public class EmpController {
    //自动依赖注入 Dependence Injection
    @Autowired
    private EmpService empService;

    //添加映射, 读取请求数据
    @GetMapping("")
    public Result retrieveAllEmp(
        //此处Integer用@RequestParam() 需在括号中添加 Required = false, 否则出现 Integer cannot be null错
        							String name, 
        							Integer gender, 
        							LocalDate begin, LocalDate end,
                                 @RequestParam(defaultValue = "1") Integer page,
                                 @RequestParam(defaultValue = "10") Integer pageSize){

        PageBean pageBean = empService.retrieveAllEmp(name, gender, begin, end, page , pageSize);
        return Result.success(pageBean);
    }
}

2.8 添加Service

​ 此处如果不传数据给mapper, 则mapper会把所有数据读取并response给pages由pageHeper显示

@Inversion of Control
@Service
public class EmpServiceImpl implements EmpService {
    //Dependence Injection
    @Autowired
    private EmpMapper empMapper;

    @Override
    public PageBean retrieveAllEmp(String name, Integer gender, LocalDate begin, LocalDate end, Integer page, Integer pageSize) {
		//先利用pageHelper创立Page, 输入初始页面和page大小
        PageHelper.startPage(page,pageSize);
        //由mapper读取页面数据, 生成list
        //此处如果不传数据给mapper, 则pageHelper会把所有数据读取并response
        List<Emp> list = empMapper.retrieveAllEmp(name, gender, begin, end);
        //强转list为Page类型
        Page pages = (Page) list;
        //pages.getTotal()读取总数
        //pages.getResult()读取页面数据
        PageBean pageBean = new PageBean(pages.getTotal(),pages.getResult());
        return pageBean;
    }
}

2.9 添加Mapper

@Mapper
public interface EmpMapper {

    List<Emp> retrieveAllEmp(String name, Integer gender, LocalDate begin, LocalDate end);
}

2.10 为Mapper编写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.EmpMapper">
    <select id="retrieveAllEmp">
        select * from emp
        <where>
            <if test="name!=null">
                and name like concat("%",#{name},"%")
            </if>
            <if test="gender!=null">
                and gender = #{gender}
            </if>
            <if test="begin!=null and end!=null">
                and create_time between begin and end
            </if>
        </where>
    </select>
</mapper>