• 基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(三)


    1. 员工分页查询

    1.1 需求分析和设计

    1.1.1 产品原型

    查询员工原型:

    在这里插入图片描述

    业务规则

    • 根据页码展示员工信息
    • 每页展示10条数据
    • 分页查询时可以根据需要,输入员工姓名进行查询
    1.1.2 接口设计

    在这里插入图片描述
    在这里插入图片描述

    注意事项:

    • 请求参数类型为Query,不是json格式提交,在路径后直接拼接。/admin/employee/page?name=zhangsan
    • 返回数据中records数组中使用Employee实体类对属性进行封装。

    1.2 代码开发

    1.2.1 设计DTO类

    根据请求参数进行封装,在sky-pojo模块中

    package com.sky.dto;
    
    import lombok.Data;
    
    import java.io.Serializable;
    
    @Data
    public class EmployeePageQueryDTO implements Serializable {
    
        //员工姓名
        private String name;
    
        //页码
        private int page;
    
        //每页显示记录数
        private int pageSize;
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    1.2.2 封装PageResult

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

    在sky-common模块

    package com.sky.result;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    import java.util.List;
    
    /**
     * 封装分页查询结果
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class PageResult implements Serializable {
    
        private long total; //总记录数
    
        private List records; //当前页数据集合
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

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

    package com.sky.result;
    
    import lombok.Data;
    
    import java.io.Serializable;
    
    /**
     * 后端统一返回结果
     * @param 
     */
    @Data
    public class Result<T> implements Serializable {
    
        private Integer code; //编码:1成功,0和其它数字为失败
        private String msg; //错误信息
        private T data; //数据
    
        public static <T> Result<T> success() {
            Result<T> result = new Result<T>();
            result.code = 1;
            return result;
        }
    
        public static <T> Result<T> success(T object) {
            Result<T> result = new Result<T>();
            result.data = object;
            result.code = 1;
            return result;
        }
    
        public static <T> Result<T> error(String msg) {
            Result result = new Result();
            result.msg = msg;
            result.code = 0;
            return result;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    1.2.3 Controller层

    在sky-server模块中,com.sky.controller.admin.EmployeeController中添加分页查询方法。

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

    在EmployeeService接口中声明pageQuery方法:

    	/**
         * 分页查询
         * @param employeePageQueryDTO
         * @return
         */
        PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1.2.5 Service层实现类

    在EmployeeServiceImpl中实现pageQuery方法:

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

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

    故在pom.xml文中添加依赖

    <dependency>
       <groupId>com.github.pagehelpergroupId>
       <artifactId>pagehelper-spring-boot-starterartifactId>
       <version>${pagehelper}version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    1.2.6 Mapper层

    在 EmployeeMapper 中声明 pageQuery 方法:

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

    在 src/main/resources/mapper/EmployeeMapper.xml 中编写SQL:

    <select id="pageQuery" resultType="com.sky.entity.Employee">
            select * from employee
            <where>
                <if test="name != null and name != ''">
                    and name like concat('%',#{name},'%')
                </if>
            </where>
            order by create_time desc
        </select>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.3 功能测试

    重启服务:访问http://localhost:8080/doc.html,进入员工分页查询。

    点击员工管理

    在这里插入图片描述

    输入员工姓名为zhangsan

    在这里插入图片描述

    发现,最后操作时间格式不清晰,再解决一下。

    在这里插入图片描述

    1.4 代码完善

    问题描述:操作时间字段显示有问题。

    在这里插入图片描述
    解决方式:

    1). 方式一

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

    在这里插入图片描述

    但这种方式,需要在每个时间属性上都要加上该注解,使用较麻烦,不能全局处理。

    2). 方式二(推荐 )

    在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式处理

    	/**
         * 扩展Spring MVC框架的消息转化器
         * @param converters
         */
        protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
            log.info("扩展消息转换器...");
            //创建一个消息转换器对象
            MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
            //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
            converter.setObjectMapper(new JacksonObjectMapper());
            //将自己的消息转化器加入容器中
            converters.add(0,converter);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    添加后,再次测试

    在这里插入图片描述

    时间格式定义,sky-common模块中

    package com.sky.json;
    
    public class JacksonObjectMapper extends ObjectMapper {
    
    	//.......
        public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";
        //.......
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2. 启用禁用员工账号

    2.1 需求分析与设计

    2.1.1 产品原型

    在员工管理列表页面,可以对某个员工账号进行启用或者禁用操作。账号禁用的员工不能登录系统,启用后的员工可以正常登录。如果某个员工账号状态为正常,则按钮显示为 “禁用”,如果员工账号状态为已禁用,则按钮显示为"启用"。

    启禁用员工原型:

    在这里插入图片描述

    业务规则:

    • 可以对状态为“启用” 的员工账号进行“禁用”操作。
    • 可以对状态为“禁用”的员工账号进行“启用”操作。
    • 状态为“禁用”的员工账号不能登录系统。
    2.1.2 接口设计

    在这里插入图片描述
    在这里插入图片描述

    1). 路径参数携带状态值。

    2). 同时,把id传递过去,明确对哪个用户进行操作。

    3). 返回数据code状态是必须,其它是非必须。

    2.2 代码开发

    2.2.1 Controller层

    在sky-server模块中,根据接口设计中的请求参数形式对应的在 EmployeeController 中创建启用禁用员工账号的方法:

    	/**
         * 启用禁用员工账号
         * @param status
         * @param id
         * @return
         */
        @PostMapping("/status/{status}")
        @ApiOperation("启用禁用员工账号")
        public Result startOrStop(@PathVariable Integer status,Long id){
            log.info("启用禁用员工账号:{},{}",status,id);
            employeeService.startOrStop(status,id);//后绪步骤定义
            return Result.success();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    2.2.2 Service层接口

    在 EmployeeService 接口中声明启用禁用员工账号的业务方法:

    	/**
         * 启用禁用员工账号
         * @param status
         * @param id
         */
        void startOrStop(Integer status, Long id);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2.2.3 Service层实现类

    在 EmployeeServiceImpl 中实现启用禁用员工账号的业务方法:

    	/**
         * 启用禁用员工账号
         *
         * @param status
         * @param id
         */
        public void startOrStop(Integer status, Long id) {
            Employee employee = Employee.builder()
                    .status(status)
                    .id(id)
                    .build();
    
            employeeMapper.update(employee);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    2.2.4 Mapper层

    在 EmployeeMapper 接口中声明 update 方法:

    	/**
         * 根据主键动态修改属性
         * @param employee
         */
        void update(Employee employee);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在 EmployeeMapper.xml 中编写SQL:

    <update id="update" parameterType="Employee">
            update employee
            <set>
                <if test="name != null">name = #{name},
                <if test="username != null">username = #{username},
                <if test="password != null">password = #{password},
                <if test="phone != null">phone = #{phone},
                <if test="sex != null">sex = #{sex},
                <if test="idNumber != null">id_Number = #{idNumber},
                <if test="updateTime != null">update_Time = #{updateTime},
                <if test="updateUser != null">update_User = #{updateUser},
                <if test="status != null">status = #{status},
            </set>
            where id = #{id}
        </update>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.3 功能测试

    测试前:

    在这里插入图片描述

    点击启用:

    在这里插入图片描述

    后记
    👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹

  • 相关阅读:
    CTFhub-RCE-远程包含
    基于Java+SpringBoot+Thymeleaf+Mysql失物招领网站平台系统设计与实现
    C++多态中的一些概念
    JAVA家教管理系统毕业设计 开题报告
    让uniGUI支持https
    word已排序好的参考文献,插入新的参考文献,序号更新
    【C++ Efficiency】使用运算符的复合形式取代其单独形式,效率更高
    J2EE从入门到入土01.MySQL安装
    uni-app —— 小程序实现左右菜单联动
    《HelloGitHub》第 95 期
  • 原文地址:https://blog.csdn.net/m0_59230408/article/details/132807936