当前位置: 首页 > article >正文

Springboot如何快速生成分页展示以及统计条数

这是表结构: 

前置知识:

分页查询公式():
-- 推导一个公式
-- select * from emp 
-- 	order by empno
-- 	limit 每页显示记录数 * (第几页-1),每页显示记录数
统计条数公式:
select count(*) from emp;
自定义一个请求返回格式,使请求结果统一:
 
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {
    private Integer code;// 响应码: 1代表成功  0 代表失败
    private String mes; // 响应信息 描述字符串
    private Object date; // 返回的数据

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

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

    public static Result error(String msg){
        return new Result(0, msg, null);
    }
}

 手撕原始代码:

1.Mapper(DAO)层:
@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);
}
2. Service服务接口层:
public interface EmpService {
    Pagebean page(Integer page, Integer pageSize);
}
实现Service服务类:
@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;
    }
}
3.Controller层:
@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);
        //调用service分页查询
        Pagebean pagebean =  empService.page(page,pageSize);
        return Result.success(pagebean);
    }
}

完结,在postman测试成功!

使用pagehelper插件快速开发:

1.配置pox.xml,添加相关依赖:
<!--        PageHelper分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.2</version>
        </dependency>
2. Mapper(DAO)层:
@Mapper
public interface EmpMapper {
    @Select("select * from emp")
    public List<Emp> list();

}
3.Service接口层:
public interface EmpService {
    Pagebean page(Integer page, Integer pageSize);
}

4.实现Service服务类:

@Service
public class EmpServiceImpl implements EmpService{
    @Autowired
    private EmpMapper empMapper;
    @Override
    public Pagebean page(Integer page, Integer pageSize) {
        //1.设置分页参数
        PageHelper.startPage(page, pageSize);

        //2.执行查询
        List<Emp> empList = empMapper.list();
        Page<Emp> p = (Page<Emp>) empList;

        //3.封装pageBean对象
        Pagebean pageBean = new Pagebean(p.getTotal(), p.getResult());
        return pageBean;
    }
}
 4.Controller层(不用改动,与上文一致):
@Slf4j
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;

    @GetMapping("/emps")
    public Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize){
//        if(page == null){
//            page = 1;
//        }
//        if(pageSize == null) {
//            pageSize = 10;
//        }
        log.info("分页查询,参数: {},{}", page,pageSize);
        //调用service分页查询
        Pagebean pagebean =  empService.page(page,pageSize);
        return Result.success(pagebean);
    }
}
5.启动程序:

自行进行测试,完结散花! 


http://www.kler.cn/news/156506.html

相关文章:

  • mac截图Snagit 中文介绍
  • RabbitMQ常用命令(二)
  • Nginx漏洞复现与分析
  • vue打印功能
  • 调和阶段setState干了什么?
  • 力扣二叉树--第三十七天
  • Flutter PK jetpack compose区别和选择
  • 无人机智慧工地:助力工地管理的未来之选
  • 改进LiteOS中物理内存分配算法(详细实验步骤+相关源码解读)
  • ProgrammingError: nan can not be used with MySQL
  • 唯创知音WT588F02A-16S录音语音芯片在宠物喂食器中的应用:小芯片,大功能
  • 【python】——函数
  • 合成相机模型【图形学】
  • 机器人制作开源方案 | 校园餐具回收分类机器人
  • 群晖NAS配置之搭建WordPress个人博客站点
  • ❀My学习Linux命令小记录(7)❀
  • 【JVM系列】Class文件分析
  • 蓝桥杯每日一题2023.12.3
  • el-select多选multiple数据无法删除,回显成功,但无法编辑,选中和删除都没反应
  • C++类的定义和使用
  • 单个 Zip 文件体积超过 40GB
  • 二蛋赠书十期:《剪映短视频剪辑从入门到精通》
  • 天翼云:“百万IOPS”助推政企上云
  • 理解 Python 的 for 循环
  • 颠覆性语音识别:单词级时间戳和说话人分离
  • nodejs的安装和验证
  • 2023/11/30JAVAweb学习(postman,各种参数,统一响应数据,三层架构,分层解耦,bean组件扫描,Bean注入及解决方式)
  • python-绘图(主次坐标轴)
  • windows11 调整鼠标灵敏度方法
  • 分享73个节日PPT,总有一款适合您