完整代码在我的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)前后端联调
网址:分类管理
示意图:
至此,导入分类模块功能已完成!