苍穹外卖项目实战(day2完整版)-记录实战教程及问题的解决方法以及完整代码

完整代码在我的gitee仓库中(主页有地址),需要的码友可以自行下载使用!

编写不易,如若帮助到你,请帮我点个赞吧!谢谢!!!

七、功能代码完善

(1)新增员工功能

1、控制层代码:

位置 :sky-take-out\sky-server\src\main\java\com\sky\controller\admin\EmployeeController.java

    /**
     * 新增员工
     * @param employeeDTO
     * @return
     */
    @PostMapping//添加这个注释是因为前端提交的数据格式是JSON,所以参数需要再使用@RequestBody注解
    @ApiOperation("新增员工")//value已省略,功能描述注解,用于接口文档
    public Result save(@RequestBody EmployeeDTO employeeDTO){
        log.info("新增员工:{}",employeeDTO);
        employeeService.save(employeeDTO);
        return Result.success();
    }

2、服务层接口代码:

位置:sky-server/src/main/java/com/sky/service/EmployeeService.java

/**
 * 新增员工
 * @param employeeDTO
 */
void save(EmployeeDTO employeeDTO);

3、服务层实现代码:

位置:sky-take-out\sky-server\src\main\java\com\sky\service\impl\EmployeeServiceImpl.java

    /**
     * 新增员工
     * @param employeeDTO
     */
    public void save(EmployeeDTO employeeDTO) {
        Employee employee = new Employee();
        //设置属性名
        //方法一:调用自定义方法
//        employee.setName(employeeDTO.getName());
        //方法二:对象属性拷贝
        //因为employeeDTO和employee中的部分属性名相同
        BeanUtils.copyProperties(employeeDTO,employee);//由employeeDTO拷贝到employee

        //设置账号默认状态,1表示正常,0表示禁用
//        employee.setStatus(1);
        //为代码规范,方便后续维护,将参数设置成自定义常量StatusConstant.ENABLE = 1
        employee.setStatus(StatusConstant.ENABLE);

        //设置密码,默认为“123456”,需要对密码进行md5加密,PasswordConstant.DEFAULT_PASSWORD = "123456"
        employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));

        //设置创建时间和修改时间
        employee.setCreateTime(LocalDateTime.now());
        employee.setUpdateTime(LocalDateTime.now());

        //设置创建人ID和修改人ID,目前先写死为一个固定值
        //TODO 后期需要修改为登录人ID
        employee.setCreateUser(10L);
        employee.setUpdateUser(10L);

        //调用持久层mapper
        employeeMapper.insert(employee);

    }

4、mapper持久层(映射层)代码:

位置:sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java

/**
 * 插入员工数据
 * @param employee
 */
@Insert("insert into employee(name, username, password, phone, sex, id_number, create_time, update_time, create_user, update_user) " +
        "values " +
       " (#{name}, #{username}, #{password}, #{phone}, #{sex}, #{idNumber}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})")
void insert(Employee employee);

注意:填写参数前需要链接数据库,否则无法正常向数据库插入数据

方式:鼠标放在“insert into...”字段中,alt+enter,打开快捷方式栏,找到“language injection...”,选择"ID"为MySql

点击左上角图标,链接数据库,输入你的数据库账号密码,点击“Test connection”

选择需要链接的数据库“sky_take_out”,最后点击OK即可

建议:下载一个AI插件,便于自动为你补全代码,如Fitten

5,、功能测试

(1)通过接口文档测试:后端开发经常使用,因为前端网页可能未开发

方法一:使用keni4j自带的接口文档网页

打开页面苍穹外卖项目接口文档

直接点发送,会发现返回401,且后端控制台返回下图内容

原因:发送内容未通过JWT校验,即无合法令牌,解决方法如下

先从“员工登录”测试,从返回内容可见,其生成的合法令牌码token(token是开发文档要求的统一使用的JWT令牌名称)

复制token码->"文档管理"->"全局参数设置"->"添加参数"

注意:当响应码显示“401”时,即未授权,说明原来的JWT token已经过期需要更换,重复上面的步骤即可,更换请求头(header)即可

方法二:APIfox:添加全局参数设置,步骤基本一致

再次测试是,会出现默认的请求头部(header),出现200,表示发送成功

(2)前后端联调:通过前端网页测试添加员工功能是否完善

(3)检查数据库数据是否添加成功,已成功添加2、3、4,密码默认为123456

6、完善代码

位置:sky-server/src/main/java/com/sky/handler/GlobalExceptionHandler.java

说明:

具体代码:

/**
 * 捕获SQL异常
 * @param ex
 * @return
 */
@ExceptionHandler
public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
    //Duplicate entry 'zhangsan' for key 'employee.idx_username'
    String message = ex.getMessage();
    if (message.contains("Duplicate entry")){
        String[] split = message.split(" ");
        String username = split[2];
        String msg = username + MessageConstant.ALREADY_EXISTS;//自定义常量“已存在”
        return Result.error(msg);
    }else {
        return Result.error(MessageConstant.UNKNOWN_ERROR);//自定义常量“未知错误”
    }
}

7、完善代码2

说明:

步骤一:

在源文件中的三个位置添加一下代码:

位置一:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

位置二:sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java

位置三:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

添加的代码为:

System.out.println("当前现成的ID为:" + Thread.currentThread().getId());

示意图:

说明:由控制台输出可知,上面步骤验证客户端发送的每一次请求都是独立的线程

步骤二:

添加代码1

位置:sky-server/src/main/java/com/sky/interceptor/JwtTokenAdminInterceptor.java

具体代码:

//设置当前线程的员工id
BaseContext.setCurrentId(empId);

示意图:

添加代码2

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

//修改为获取当前登录人ID
employee.setCreateUser(BaseContext.getCurrentId());
employee.setUpdateUser(BaseContext.getCurrentId());

//改前代码为
//TODO 后期需要修改为登录人ID
employee.setCreateUser(10L);//设置一个常量
employee.setUpdateUser(10L);

示意图:

至此,新增员工功能完成

(2)员工分页查询

以下为需要新增的代码

1、控制层代码(EmployeeController)

位置:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

具体代码:

/**
 * 分页查询员工
 * @param employeePageQueryDTO
 * @return
 */
@GetMapping("/page")//分页查询员工
@ApiOperation("员工分页查询")//value已省略,功能描述注解,用于接口文档
public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO){
    log.info("分页查询员工:参数为{}",employeePageQueryDTO);
    PageResult pageResult = employeeService.pageQuery(employeePageQueryDTO);
    return Result.success(pageResult);
}

示意图如下:

2、服务层接口实现代码(EmployeeServiceImpl)

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

/**
 * 员工分页查询
 * @param employeePageQueryDTO
 * @return
 */
public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
    //select * from employee limit 0,10
    //开始分页查询
    PageHelper.startPage(employeePageQueryDTO.getPage(), employeePageQueryDTO.getPageSize());
    //调用持久层mapper
    Page<Employee> page = employeeMapper.pageQuery(employeePageQueryDTO);
    //由于PageHelper的分页方法返回的Page对象中没有total属性,所以需要手动计算total,并且本方法需要返回PageResult对象,
    // 所以需要封装PageResult对象
    //获取分页查询结果
    long total = page.getTotal();
    List<Employee> records = page.getResult();
    //封装分页结果
    return new PageResult(total, records);
}

示意图如下:

3、数据持久层实现代码(EmployeeMapper)

位置:sky-server/src/main/resources/mapper/EmployeeMapper.xml

具体作用
  • SQL 映射配置:包含与 Employee 实体类相关的 SQL 语句(如 insert、select、update、delete)。
  • Java 接口绑定:通过命名空间(namespace)与对应的 Java Mapper 接口(如 EmployeeMapper.java)关联。
  • 结果集映射:定义数据库字段与 Java 对象属性的映射关系(如 resultMap)。

具体代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.EmployeeMapper">
    <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>
</mapper>

示意图如下:

4、导入mybatis的分页插件pagehelper依赖

位置:sky-take-out\pom.xml

具体代码:

<!--            mybatis的分页插件pagehelper-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>${pagehelper}</version>
            </dependency>

示意图如下:(源文件已导入,无需执行此步骤!!)

5、部分问题的解决方法

(1)提示映射的数据库的表名,可以在Settings->Languages & Frameworks ->SQL Dialects里面将两个"SQL Dialec"t设置成"MySQL"

后续还要选择对应的数据库,鼠标放在employee中,快捷键alt+enter,步骤如下

ID选择“MySQL”

数据库选择"sky_take_out"

(2)EmployeeService.java中,“...pageQuery...“没报错,即代码如下

PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);

解决办法:需要下载IDEA插件“MyBatisX”,“pageQuery“才会报错并提示跳转到EmployeeMapper.xml,且首行会出现小鸟标识

6、功能测试

(1)Swagger接口文档测试:

网址:苍穹外卖项目接口文档

请求参数说明:

name:查询的员工名字

page:查询页数

pageSize:单页查询的员工记录数量

相应内容说明:

 "total": 5:表示数据库中共由五条员工记录;

“record”:..:表示查询的员工记录数据

注意:

1、如果报500,查看一下sql语句中,可能是因为mybatis的问题,映射文件中条件判断多写了and,导致sql语句拼接错误,

事实上,and并没有多写,因为where注解会自动屏蔽多余的and 或者or

2、注意concat里面是单引号!

3、报错500说数据转换有错的试试把if里的' '中间的空格去掉

4、

2、响应码为401,表示JWT令牌码过期,需要重新更换,原因是我们在YML配置文件中设置了令牌的有效时间为7200000毫秒,

我们可以先手动改变有效时间

加两位数即可,但后续最好改回来。

(2)前后端联调

网址:员工管理

单次模糊查询,控制台信息为:

直接点击查询,控制台信息为:

输出信息说明:

“ Preparing: SELECT count(0) FROM employee“:由插件pageHelper自动写的

在”Preparing: SELECT * FROM employee order by create_time desc LIMIT ?“中

“SELECT * FROM employee order by create_time desc”:由我们自己编写,但“LIMIT ?”由插件pageHelper动态拼接进去的

7、完善代码(时间转换)

由于“最后操作时间”的显示不符合我们的阅读习惯,需要修改成“年月日时分秒”的形式

方式一:

代码位置:sky-pojo/src/main/java/com/sky/entity/Employee.java

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;

示意图如下:

重新调试,时间由原来的数组格式转成时间格式

方式二:

添加代码位置:sky-server/src/main/java/com/sky/config/WebMvcConfiguration.java

具体代码:

/**
 * 扩展Spring MVC框架的消息转换器
 * @param converters
 */
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    log.info("开始扩展Spring MVC框架的消息转换器...");//在控制台输出
    //创建一个消息转换对象器
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为Json数据
    converter.setObjectMapper(new JacksonObjectMapper());
    //将自己的消息转化器加入容器,“0”表示优先执行自定义的消息转化器converter
    converters.add(0, converter);
}

示意图如下:

重新启动项目并测试,结果如下

可见时间格式发生改变,至此,员工分页查询功能完成!

(3)启用禁用员工账号

1、说明分析

路径参数指定怎么做,请求参数(Query)表示对谁做

2、控制层代码(EmployeeController)

添加位置:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

添加的具体代码:

    /**
     * 启用禁用员工账号
     * @param status
     * @param id
     * @return
     */
    @PostMapping("/status/{status}")
    @ApiOperation("启用禁用员工账号")
    //由于status参数为路径参数,所以需要添加@PathVariable注解
    public Result startOrStop(@PathVariable Integer status,Long id) {
        log.info("启用禁用员工账号:id={},status={}", id, status);
        employeeService.startOrStop(id, status);
        return Result.success();
        }
}

示意图如下:

3、服务层接口代码(EmployeeService)

添加位置:sky-server/src/main/java/com/sky/service/EmployeeService.java

具体代码:

/**
 * 启用禁用员工账号
 * @param status
 * @param id
 */
void startOrStop(Integer status, Long id);

示意图:

4、服务层接口实现代码(EmployeeServiceImpl)

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

    /**
     * 启用禁用员工账号
     * @param status
     * @param id
     */
    public void startOrStop(Integer status, Long id) {
/*        //方法一:自己创建一个对象并赋值
        Employee employee = new Employee();
        employee.setStatus(status);
        employee.setId(id);
        */
        //方法二:使用Employee类的构建器模式来创建一个Employee对象
        Employee employee = Employee.builder()
                .status(status)
                .id(id)
                .build();
        employeeMapper.update(employee);
    }

示意图:

4、持久层代码(EmployeeMapper)

位置:sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java

具体代码:

/**
 * 根据主键动态修改属性(启用禁用员工账号)
 * @param employee
 */
void update(Employee employee);

示意图:

4、mapper映射文件(EmployeeMapper.xml)

位置:sky-server/src/main/resources/mapper/EmployeeMapper.xml

具体代码:

<!--    员工账号禁用启用(修改员工状态)-->
    <update id="update" parameterType="Employee">
        update employee
        <set>
            <if test="name!= null">name = #{name},</if>
            <if test="username != null">username = #{username},</if>
            <if test="password!= null">password = #{password},</if>
            <if test="phone!= null">phone = #{phone},</if>
            <if test="sex!= null">sex = #{sex},</if>
            <if test="idNumber != null">id_Number = #{idNumber},</if>
            <if test="status != null">status = #{status},</if>
            <if test="updateTime != null">update_Time = #{updateTime},</if>
            <if test="updateUser != null">update_User = #{updateUser},</if>
        </set>
        /*不加where语句,会改变数据库所有员工账号的状态*/
    </update>

注意:上面的代码漏了where语句,在后面有更新的完整代码即错误情况

示意图:

5、接口测试

(1)Swagger接口文档测试

步骤:

1、在startOrStop方法上点上断点,再启动(DeBug)项目

2、打开数据库,查看employee表中员工的status(账号状态),选择王五为测试对象(id为15)

注意:整个表的status都改变成了0,因为更新语句没加where条件(where id = #{id}),才导致全表数据改变,

修正代码如下:

位置:sky-server/src/main/resources/mapper/EmployeeMapper.xml

修正的代码:

<!--    员工账号禁用启用(修改员工状态)-->
    <update id="update" parameterType="Employee">
        update employee
        <set>
            <if test="name!= null">name = #{name},</if>
            <if test="username != null">username = #{username},</if>
            <if test="password!= null">password = #{password},</if>
            <if test="phone!= null">phone = #{phone},</if>
            <if test="sex!= null">sex = #{sex},</if>
            <if test="idNumber != null">id_Number = #{idNumber},</if>
            <if test="status != null">status = #{status},</if>
            <if test="updateTime != null">update_Time = #{updateTime},</if>
            <if test="updateUser != null">update_User = #{updateUser},</if>
        </set>
        /*不加where语句,会改变数据库所有员工账号的状态*/
        where id = #{id}
    </update>

示意图如下:

我们重新测试一遍

查看数据库可以发现,id = 15的员工账号状态已变成1(已启用)

3、打开Swagger接口文档

网址为:苍穹外卖项目接口文档

id输入15,status设置为0,点击发送

响应码为200,表示成功。若响应码为401,表示JWT令牌(token)过期,需更换参数值,方式为在员工登录调试,复制控制台输出的“token”码

在“文档管理”|“全局参数设置”。更换新的参数值,位置如下

4、点击发送后,断点处和控制台会出现目标员工的id = 15,以及改变后的账号状态status = 0(表示已禁用),原来的值为1(启用)

数据放过断点后,数据库的员工状态即可发生改变

(2)前后端联调

我们可以看到,通过接口文档改变的员工王五(id = 15)账号状态已变成禁用,我们可以点击“启用”按钮

点击后

王五(id = 15)账号状态再次发生改变,变为禁用查看数据库,也发生改变,说明功能已完成!

4)编辑员工信息

1、需求分析和设计

先查员工信息(GET),再编辑(PUT)

2、代码开发一(查询员工)

以下是需要添加的代码

(1)控制层代码(EmployeeController)

位置:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

具体代码:

/**
 * 根据员工ID查询员工信息
  * @param id
 * @return
 */
@GetMapping("/{id}")
@ApiOperation("根据员工ID查询员工信息")
public Result<Employee> getByID(@PathVariable Long id) {
    log.info("查询员工:id={}", id);
    Employee employee = employeeService.getById(id);
    return Result.success(employee);
}

示意图:

(2)服务层接口代码(EmployeeService)

位置:sky-server/src/main/java/com/sky/service/EmployeeService.java

具体代码:

/**
 * 根据id查询员工信息
 * @param id
 * @return
 */
Employee getById(Long id);

示意图如下:

(3)服务层接口实现类(EmployeeServiceImpl)

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

/**
 * 根据id查询员工信息
 * @param id
 * @return
 */
public Employee getById(Long id) {
    Employee employee = employeeMapper.getById(id);
    employee.setPassword("******");//密码不返回给前端
    return employee;
}

示意图:

(4)数据持久层代码(EmployeeMapper)

位置:sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java

具体代码:

    /**
     * 根据ID号查询员工信息
     * @param id
     * @return
     */
@Select("select * from employee where id = #{id}")
Employee getById(Long id);

示意图:

(4)测试接口

启动项目

打开前端网页

网址:[员工管理](http://localhost/#/employee)

点击“王五”|“修改“

查看控制台信息,出现修改的员工ID号和相应的查询语句

至此,第一步查询员工接口完成!

3、代码开发二(修改并保存员工信息)

(1)控制层代码(EmployeeController)

位置:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

具体代码:

@PutMapping
@ApiOperation("更新员工信息")
public Result update(@RequestBody EmployeeDTO employeeDTO) {
    log.info("更新员工信息:{}", employeeDTO);
    employeeService.update(employeeDTO);
    return Result.success();
}

示意图:

(2)服务层接口代码(EmployeeService)

位置:sky-server/src/main/java/com/sky/service/EmployeeService.java

具体代码:

/**
 * 修改员工信息
 * @param employeeDTO
 */
void update(EmployeeDTO employeeDTO);

示意图:

(3)服务层接口实现类代码(EmployeeServiceImpl)

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

/**
 * 更新员工信息
 * @param employeeDTO
 */
public void update(EmployeeDTO employeeDTO) {
    Employee employee = new Employee();//创建一个新的Employee对象
    //由employeeDTO拷贝到employee
    BeanUtils.copyProperties(employeeDTO,employee);
    //设置修改时间和修改人ID
    employee.setUpdateTime(LocalDateTime.now());
    employee.setUpdateUser(BaseContext.getCurrentId());//获取当前登录人ID
    //调用持久层mapper
    employeeMapper.update(employee);
}

示意图:

由于employeeMapper.update(employee)方法,我们在往期已经完善,这里不多赘述,需要了解的可以回看“(3)启用禁用员工账号”这一期内容

(4)测试接口

1、前后端联调

打开前端网页:苍穹外卖

在EmployeeController的更新员工方法添加断点并启动(DeBug)项目,打开前端网页(员工管理),选择“王五”或者其他员工,点击“修改”

修改性别为“男”,点击保存,查看控制台信息

可见后端已接受到修改的信息,跳过断点

查询数据库,发现员工信息已成功修改

2、Swagger接口文档测试

打开数据库,选择员工“王五”,id = 15,为测试对象

打开接口文档苍穹外卖项目接口文档,打开图示位置,并填写参数,如

{
 "id": 15,
 "idNumber": "wangliu",
 "name": "王六",
 "phone": "14321756645",
 "sex": "男",
 "username": "王六"
}

点击发送

查看控制台信息

跳过断点,并查看网页及数据库信息

响应码为200表示成功,若出现401,表示JWT令牌码(token)过期,需更换新的,主页往期内容由教程“(3)启用禁用员工账号”

数据发生改变,至此,编辑员工信息功能完成!

5)导入分类模块功能

1、需求分析和设计

2、代码导入
1)持久层代码(mapper)文件导入

位置:sky-server/src/main/java/com/sky/mapper

(2)CategoryMapper.xml文件导入

位置:sky-server/src/main/resources/mapper/CategoryMapper.xml

示意图:

(3)CategoryService.java文件导入

位置:sky-server/src/main/java/com/sky/service

示意图:

(4)CategoryServiceImpl.java文件导入

位置:sky-server/src/main/java/com/sky/service/impl

示意图:

(5)CategoryController.java文件导入

位置:sky-server/src/main/java/com/sky/controller/admin

示意图:

(6)编译项目

由于文件是直接导入的,我们需要手动编译一遍,步骤如下

sky-server complie报错的点击sky-take-out下的install 和compile后再试试

如果是版本不匹配记得改jdk版本以及maven配置文件内的jdk版本

3、接口测试
1)前后端联调

网址:分类管理

示意图:

至此,导入分类模块功能已完成!

4)编辑员工信息

1、需求分析和设计

先查员工信息(GET),再编辑(PUT)

2、代码开发一(查询员工)

以下是需要添加的代码

(1)控制层代码(EmployeeController)

位置:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

具体代码:

/**
 * 根据员工ID查询员工信息
  * @param id
 * @return
 */
@GetMapping("/{id}")
@ApiOperation("根据员工ID查询员工信息")
public Result<Employee> getByID(@PathVariable Long id) {
    log.info("查询员工:id={}", id);
    Employee employee = employeeService.getById(id);
    return Result.success(employee);
}

示意图:

(2)服务层接口代码(EmployeeService)

位置:sky-server/src/main/java/com/sky/service/EmployeeService.java

具体代码:

/**
 * 根据id查询员工信息
 * @param id
 * @return
 */
Employee getById(Long id);

示意图如下:

(3)服务层接口实现类(EmployeeServiceImpl)

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

/**
 * 根据id查询员工信息
 * @param id
 * @return
 */
public Employee getById(Long id) {
    Employee employee = employeeMapper.getById(id);
    employee.setPassword("******");//密码不返回给前端
    return employee;
}

示意图:

(4)数据持久层代码(EmployeeMapper)

位置:sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java

具体代码:

    /**
     * 根据ID号查询员工信息
     * @param id
     * @return
     */
@Select("select * from employee where id = #{id}")
Employee getById(Long id);

示意图:

(4)测试接口

启动项目

打开前端网页

网址:[员工管理](http://localhost/#/employee)

点击“王五”|“修改“

查看控制台信息,出现修改的员工ID号和相应的查询语句

至此,第一步查询员工接口完成!

3、代码开发二(修改并保存员工信息)

(1)控制层代码(EmployeeController)

位置:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

具体代码:

@PutMapping
@ApiOperation("更新员工信息")
public Result update(@RequestBody EmployeeDTO employeeDTO) {
    log.info("更新员工信息:{}", employeeDTO);
    employeeService.update(employeeDTO);
    return Result.success();
}

示意图:

(2)服务层接口代码(EmployeeService)

位置:sky-server/src/main/java/com/sky/service/EmployeeService.java

具体代码:

/**
 * 修改员工信息
 * @param employeeDTO
 */
void update(EmployeeDTO employeeDTO);

示意图:

(3)服务层接口实现类代码(EmployeeServiceImpl)

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

/**
 * 更新员工信息
 * @param employeeDTO
 */
public void update(EmployeeDTO employeeDTO) {
    Employee employee = new Employee();//创建一个新的Employee对象
    //由employeeDTO拷贝到employee
    BeanUtils.copyProperties(employeeDTO,employee);
    //设置修改时间和修改人ID
    employee.setUpdateTime(LocalDateTime.now());
    employee.setUpdateUser(BaseContext.getCurrentId());//获取当前登录人ID
    //调用持久层mapper
    employeeMapper.update(employee);
}

示意图:

由于employeeMapper.update(employee)方法,我们在往期已经完善,这里不多赘述,需要了解的可以回看“(3)启用禁用员工账号”这一期内容

(4)测试接口

1、前后端联调

打开前端网页:苍穹外卖

在EmployeeController的更新员工方法添加断点并启动(DeBug)项目,打开前端网页(员工管理),选择“王五”或者其他员工,点击“修改”

修改性别为“男”,点击保存,查看控制台信息

可见后端已接受到修改的信息,跳过断点

查询数据库,发现员工信息已成功修改

2、Swagger接口文档测试

打开数据库,选择员工“王五”,id = 15,为测试对象

打开接口文档苍穹外卖项目接口文档,打开图示位置,并填写参数,如

{
 "id": 15,
 "idNumber": "wangliu",
 "name": "王六",
 "phone": "14321756645",
 "sex": "男",
 "username": "王六"
}

点击发送

查看控制台信息

跳过断点,并查看网页及数据库信息

响应码为200表示成功,若出现401,表示JWT令牌码(token)过期,需更换新的,主页往期内容由教程“(3)启用禁用员工账号”

数据发生改变,至此,编辑员工信息功能完成!

5)导入分类模块功能

1、需求分析和设计

2、代码导入
1)持久层代码(mapper)文件导入

位置:sky-server/src/main/java/com/sky/mapper

(2)CategoryMapper.xml文件导入

位置:sky-server/src/main/resources/mapper/CategoryMapper.xml

示意图:

(3)CategoryService.java文件导入

位置:sky-server/src/main/java/com/sky/service

示意图:

(4)CategoryServiceImpl.java文件导入

位置:sky-server/src/main/java/com/sky/service/impl

示意图:

(5)CategoryController.java文件导入

位置:sky-server/src/main/java/com/sky/controller/admin

示意图:

(6)编译项目

由于文件是直接导入的,我们需要手动编译一遍,步骤如下

sky-server complie报错的点击sky-take-out下的install 和compile后再试试

如果是版本不匹配记得改jdk版本以及maven配置文件内的jdk版本

3、接口测试
1)前后端联调

网址:分类管理

示意图:

至此,导入分类模块功能已完成!

4)编辑员工信息

1、需求分析和设计

先查员工信息(GET),再编辑(PUT)

2、代码开发一(查询员工)

以下是需要添加的代码

(1)控制层代码(EmployeeController)

位置:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

具体代码:

/**
 * 根据员工ID查询员工信息
  * @param id
 * @return
 */
@GetMapping("/{id}")
@ApiOperation("根据员工ID查询员工信息")
public Result<Employee> getByID(@PathVariable Long id) {
    log.info("查询员工:id={}", id);
    Employee employee = employeeService.getById(id);
    return Result.success(employee);
}

示意图:

(2)服务层接口代码(EmployeeService)

位置:sky-server/src/main/java/com/sky/service/EmployeeService.java

具体代码:

/**
 * 根据id查询员工信息
 * @param id
 * @return
 */
Employee getById(Long id);

示意图如下:

(3)服务层接口实现类(EmployeeServiceImpl)

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

/**
 * 根据id查询员工信息
 * @param id
 * @return
 */
public Employee getById(Long id) {
    Employee employee = employeeMapper.getById(id);
    employee.setPassword("******");//密码不返回给前端
    return employee;
}

示意图:

(4)数据持久层代码(EmployeeMapper)

位置:sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java

具体代码:

    /**
     * 根据ID号查询员工信息
     * @param id
     * @return
     */
@Select("select * from employee where id = #{id}")
Employee getById(Long id);

示意图:

(4)测试接口

启动项目

打开前端网页

网址:[员工管理](http://localhost/#/employee)

点击“王五”|“修改“

查看控制台信息,出现修改的员工ID号和相应的查询语句

至此,第一步查询员工接口完成!

3、代码开发二(修改并保存员工信息)

(1)控制层代码(EmployeeController)

位置:sky-server/src/main/java/com/sky/controller/admin/EmployeeController.java

具体代码:

@PutMapping
@ApiOperation("更新员工信息")
public Result update(@RequestBody EmployeeDTO employeeDTO) {
    log.info("更新员工信息:{}", employeeDTO);
    employeeService.update(employeeDTO);
    return Result.success();
}

示意图:

(2)服务层接口代码(EmployeeService)

位置:sky-server/src/main/java/com/sky/service/EmployeeService.java

具体代码:

/**
 * 修改员工信息
 * @param employeeDTO
 */
void update(EmployeeDTO employeeDTO);

示意图:

(3)服务层接口实现类代码(EmployeeServiceImpl)

位置:sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java

具体代码:

/**
 * 更新员工信息
 * @param employeeDTO
 */
public void update(EmployeeDTO employeeDTO) {
    Employee employee = new Employee();//创建一个新的Employee对象
    //由employeeDTO拷贝到employee
    BeanUtils.copyProperties(employeeDTO,employee);
    //设置修改时间和修改人ID
    employee.setUpdateTime(LocalDateTime.now());
    employee.setUpdateUser(BaseContext.getCurrentId());//获取当前登录人ID
    //调用持久层mapper
    employeeMapper.update(employee);
}

示意图:

由于employeeMapper.update(employee)方法,我们在往期已经完善,这里不多赘述,需要了解的可以回看“(3)启用禁用员工账号”这一期内容

(4)测试接口

1、前后端联调

打开前端网页:苍穹外卖

在EmployeeController的更新员工方法添加断点并启动(DeBug)项目,打开前端网页(员工管理),选择“王五”或者其他员工,点击“修改”

修改性别为“男”,点击保存,查看控制台信息

可见后端已接受到修改的信息,跳过断点

查询数据库,发现员工信息已成功修改

2、Swagger接口文档测试

打开数据库,选择员工“王五”,id = 15,为测试对象

打开接口文档苍穹外卖项目接口文档,打开图示位置,并填写参数,如

{
 "id": 15,
 "idNumber": "wangliu",
 "name": "王六",
 "phone": "14321756645",
 "sex": "男",
 "username": "王六"
}

点击发送

查看控制台信息

跳过断点,并查看网页及数据库信息

响应码为200表示成功,若出现401,表示JWT令牌码(token)过期,需更换新的,主页往期内容由教程“(3)启用禁用员工账号”

数据发生改变,至此,编辑员工信息功能完成!

5)导入分类模块功能

1、需求分析和设计

2、代码导入
1)持久层代码(mapper)文件导入

位置:sky-server/src/main/java/com/sky/mapper

(2)CategoryMapper.xml文件导入

位置:sky-server/src/main/resources/mapper/CategoryMapper.xml

示意图:

(3)CategoryService.java文件导入

位置:sky-server/src/main/java/com/sky/service

示意图:

(4)CategoryServiceImpl.java文件导入

位置:sky-server/src/main/java/com/sky/service/impl

示意图:

(5)CategoryController.java文件导入

位置:sky-server/src/main/java/com/sky/controller/admin

示意图:

(6)编译项目

由于文件是直接导入的,我们需要手动编译一遍,步骤如下

sky-server complie报错的点击sky-take-out下的install 和compile后再试试

如果是版本不匹配记得改jdk版本以及maven配置文件内的jdk版本

3、接口测试
1)前后端联调

网址:分类管理

示意图:

至此,导入分类模块功能已完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值