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


    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类型数据进行格式化处理

     

  • 相关阅读:
    Unity接入北斗探针SDK(基于UnityPlayerActivity)丨一、效果展示与材料准备
    【教学类-16-01】20221122《世界杯七巧板A4-随机参考图》(大班)
    【记录】java打印控制台特殊字符被转义,再转回正常字符(<<&gt>d等等特殊字符)
    java计算机毕业设计影院资源管理系统演示录像2020源程序+mysql+系统+lw文档+远程调试
    java之《浅入了解异常》适合预习,复习
    ClickHouse(14)ClickHouse合并树MergeTree家族表引擎之VersionedCollapsingMergeTree详细解析
    组件传参及Vuex基础
    ubuntu下个人觉得必备,好用的应用软件
    Python面向对象相关总结
    Linux离线安装插件
  • 原文地址:https://blog.csdn.net/weixin_47786582/article/details/133811235