• 苍穹外卖(三) 员工分页及技术实现细节


    2. 员工分页查询

    2.1 需求分析和设计

    2.1.1 产品原型

    2.1.2 接口设计

    2.2 代码开发 

    2.2.1 设计DTO类 

    根据请求参数进行封装 

    2.2.2 封装PageResult 

    后面所有的分页查询,统一都封装为PageResult对象。 

    员工信息分页查询后端返回的对象类型为: Result 

    2.2.3 Controller层 

    因为前端传过来的不是Json格式数据, 所以不需要@RequestBody

    1. /**
    2. * 员工分页查询
    3. * @param employeePageQueryDTO
    4. * @return
    5. */
    6. @GetMapping("/page")
    7. @ApiOperation("员工分页查询")
    8. public Result page(EmployeePageQueryDTO employeePageQueryDTO){
    9. log.info("员工分页查询,参数为:{}", employeePageQueryDTO);
    10. PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);//后续定义
    11. return Result.success(pageResult);
    12. }

    2.2.5 Service层实现类

    在EmployeeServiceImpl中实现pageQuery方法:

    1. /**
    2. * 分页查询
    3. *
    4. * @param employeePageQueryDTO
    5. * @return
    6. */
    7. public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
    8. // select * from employee limit 0,10
    9. //开始分页查询
    10. PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());
    11. Page page = employeeMapper.pageQuery(employeePageQueryDTO);//后续定义
    12. long total = page.getTotal();
    13. List records = page.getResult();
    14. return new PageResult(total, records);
    15. }

    2.2.6 Mapper层 

    1. /**
    2. * 分页查询
    3. * @param employeePageQueryDTO
    4. * @return
    5. */
    6. Page pageQuery(EmployeePageQueryDTO employeePageQueryDTO);

     细节一 : PageHelper

    **注意:**此处使用 mybatis 的分页插件 PageHelper 来简化分页代码的开发。底层基于 mybatis 的拦截器实现。

    public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
        // select * from employee limit 0,10
        // 开始分页查询
        PageHelper.startPage(employeePageQueryDTO.getPage(),                                                 employeePageQueryDTO.getPageSize());

        Page page = employeeMapper.pageQuery(employeePageQueryDTO);
        long total = page.getTotal();
        List records = page.getResult();
        return new PageResult(total, records);
    }


    实现细节


    PageHelper.startPage(employeePageQueryDTO.getPage(),                                                 employeePageQueryDTO.getPageSize());

                                                                     ⬇ 

                                                                     ⬇ 

                                                                    ⬇                                                                ⬇ 

    所以PageHelper底层还是一个ThreadLocal 

    而在之后的分页查询操作之前, 就会从ThreadLocal变量中把分页要求(页码, 每页记录数)查询出来

    并在执行查询语句时, 动态得加上 limit 限制

    select * from employee limit 0,10

    故在pom.xml文中添加依赖(初始工程已添加)

    细节二 : 扩展SpringMVC框架的消息转换器 

    解决方式:

    1). 方式一

    在属性上加上注解,对日期进行格式化

    太麻烦了 不用

    2). 方式二(推荐 )

    在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对后端返回给前端的日期数据类型进行格式处理

    converters是整个SpringMVC使用的转化器集合

     对象转换器继承自Jackson 包中进行json处理的类,

    将属性中的LocalDataTime类型数据进行格式化处理

     

  • 相关阅读:
    word2vec原理
    WebSocket 解析与应用(包含web前端、服务端、小程序、dart/flutter中的用法)
    IPv6进阶:IPv6 过渡技术之 6to4 自动隧道
    MyBatis-Plus学习笔记(Spring版)——(六)MyBatis-Plus分页插件与乐观锁
    bat脚本总结
    普通人在当前大环境下——少看宏观,多看具体
    SpringMVC---统一处理异常
    ML:置信区间的简介(精密度/准确度/精确度的三者区别及其关系)、使用方法、案例应用之详细攻略
    接口自动化测试之预期结果的处理
    HQS-Part4.指针、一维数组、二级指针、二维数组、指针数组、数组指针。
  • 原文地址:https://blog.csdn.net/weixin_47786582/article/details/133811235