SpringBoot分页实现查询数据
1.原生查询
1.1创建分页查询实体类
package com.itheima.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; //数据列表
}
1.2编写控制类
package com.itheima.controller;import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.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;/*** 员工管理Controller*/
//开启日志
@Slf4j
@RestController
public class EmpController {@Autowiredprivate EmpService empService;@GetMapping("/emps")
// 能够拿到前端传递过来的参数public Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name, Short gender,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
// 设置默认值
// if(page==null) page=1;
// if(pageSize==null) pageSize=10;log.info("分页查询参数,参数:{},{},{},{}", page, pageSize, name, gender, begin, end);PageBean pageBean = empService.page(page, pageSize);
// ,name, gender, begin, endreturn Result.success(pageBean);}
}
1.3接口
package com.itheima.service;import com.itheima.pojo.PageBean;/*** 员工管理*/
public interface EmpService {// 分页查询PageBean page(Integer page, Integer pageSize);
// , String name, Short gender, LocalDate begin, LocalDate end
}
1.4实现接口类
package com.itheima.service.impl;import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic PageBean page(Integer page, Integer pageSize) {
// 获取总记录数Long count = empMapper.count();
// 分页查询结果列表
// 起始索引计算Integer startIndex = (page - 1) * pageSize;List<Emp> empList = empMapper.page(startIndex, pageSize);
// 封装PageBean对象PageBean pageBean = new PageBean(count, empList);return pageBean;}
// @Override
// public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {1.设置分页参数
// PageHelper.startPage(page, pageSize);2.执行查询
// List<Emp> empList = empMapper.list(name, gender, begin, end);将empList强转为Page类型Page<Emp>是一个分页对象,包含了总记录数和分页后的查询结果。
// Page<Emp> p=(Page<Emp>) empList;封装PageBean对象
// PageBean pageBean = new PageBean(p.getTotal(), p.getResult());
//
// return pageBean;
// }
}
1.5 mapper接口类
package com.itheima.mapper;import com.itheima.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);
// 员工信息查询
// @Select("select * from emp")
// public List<Emp> list();
// String name, Short gender, LocalDate begin, LocalDate end
}
1.6数据库结构
1.7测试接口
1.8 application.properties
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=123456#配置mybatis的日志, 指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#开启mybatis的驼峰命名自动映射开关 a_column ------> aCloumn
mybatis.configuration.map-underscore-to-camel-case=true
2.PageHelper
说明:分页插件提示效率。按条件查询
2.1配置依赖
<!-- 配置PageHelper分页插件--><dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version></dependency>
2.2 创建分页查询实体类
package com.itheima.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.3编写控制类
package com.itheima.controller;import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.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;/*** 员工管理Controller*/
//开启日志
@Slf4j
@RestController
public class EmpController {@Autowiredprivate EmpService empService;@GetMapping("/emps")
// 能够拿到前端传递过来的参数public Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name, Short gender,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
// 设置默认值
// if(page==null) page=1;
// if(pageSize==null) pageSize=10;log.info("分页查询参数,参数:{},{},{},{}", page, pageSize, name, gender, begin, end);PageBean pageBean = empService.page(page, pageSize,name, gender, begin, end);
// return Result.success(pageBean);}
}
2.4接口
package com.itheima.service;import com.itheima.pojo.PageBean;import java.time.LocalDate;/*** 员工管理*/
public interface EmpService {// 分页查询PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end);
//
}
2.5实现接口类
package com.itheima.service.impl;import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDate;
import java.util.List;@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;// @Override
// public PageBean page(Integer page, Integer pageSize) {获取总记录数
// Long count = empMapper.count();分页查询结果列表起始索引计算
// Integer startIndex = (page - 1) * pageSize;
// List<Emp> empList = empMapper.page(startIndex, pageSize);封装PageBean对象
// PageBean pageBean = new PageBean(count, empList);
//
// return pageBean;
// }@Overridepublic PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
//
// 1.设置分页参数PageHelper.startPage(page, pageSize);
// 2.执行查询List<Emp> empList = empMapper.list(name, gender, begin, end);
//
// 将empList强转为Page类型
// Page<Emp>是一个分页对象,包含了总记录数和分页后的查询结果。Page<Emp> p=(Page<Emp>) empList;
// 封装PageBean对象PageBean pageBean = new PageBean(p.getTotal(), p.getResult());return pageBean;}
}
2.6mapper接口类
package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.time.LocalDate;
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);
// 员工信息查询@Select("select * from emp")public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
//
}