文章目录
- 1、需求设计分析
- 2、接口设计
- 3、表设计
- 4、设计DTO类
- 5、Controller层功能实现
- 6、Service层功能实现
- 7、Mapper层功能实现
1、需求设计分析
一般在做需求分析时,往往都是对照着产品原型进行分析,因为产品原型比较直观,便于我们理解业务。
后台系统中可以管理员工信息,通过新增员工来添加后台系统用户。
当填写完表单信息, 点击"保存"按钮后, 会提交该表单的数据到服务端, 在服务端中需要接受数据, 然后将数据保存至数据库中。
注意事项:
- 账号必须是唯一的
- 手机号为合法的11位手机号码
- 身份证号为合法的18位身份证号码
- 密码默认为123456
2、接口设计
明确新增员工接口的请求路径、请求方式、请求参数、返回数据。
本项目约定:
- 管理端发出的请求,统一使用**/admin**作为前缀。
- 用户端发出的请求,统一使用**/user**作为前缀。
3、表设计
新增员工,将我们新增页面录入的员工数据插入到employee表。
employee表结构:
字段名 | 数据类型 | 说明 | 备注 |
---|---|---|---|
id | bigint | 主键 | 自增 |
name | varchar(32) | 姓名 | |
username | varchar(32) | 用户名 | 唯一 |
password | varchar(64) | 密码 | |
phone | varchar(11) | 手机号 | |
sex | varchar(2) | 性别 | |
id_number | varchar(18) | 身份证号 | |
status | Int | 账号状态 | 1正常 0锁定 |
create_time | Datetime | 创建时间 | |
update_time | datetime | 最后修改时间 | |
create_user | bigint | 创建人id | |
update_user | bigint | 最后修改人id |
4、设计DTO类
**注意:**当前端提交的数据和实体类中对应的属性差别比较大时,建议使用DTO来封装数据
在com.sky.dto包下,已定义EmployeeDTO,我们直接使用就好了
package com.sky.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class EmployeeDTO implements Serializable {
private Long id;
private String username;
private String name;
private String phone;
private String sex;
private String idNumber;
}
5、Controller层功能实现
在com.sky.cntroller.admin找到EmployeeController类
在EmployeeController类中创建save方法,方法很简单
- 调用业务层(下面会写)
- 返回成功标识
@PostMapping
@ApiOperation("新增员工")
public Result sava(@RequestBody EmployeeDTO employeeDTO){
//打印日志
log.info("新增员工",employeeDTO);
//调用逻辑
employeeService.sava(employeeDTO);
//返回日志
return Result.success();
}
@PostMapping
:用于将HTTP POST请求映射到特定的处理方法上@ApiOperation("新增员工")
:Swagger框架的一个注解,生成API文档Result
类定义了后端统一返回结果格式。
6、Service层功能实现
在com.sky.server.EmployeeService包下找到EmployeeService接口添加save方法
/**
* 新增员 工
* @param employeeDTO
*/
void sava(EmployeeDTO employeeDTO);
在EmployeeServiceImpl中实现新增员工方法
- 将dto数据封装给employee对象(因为dto是封装前端传过来的,缺失了一些信息,所以转成employee)
- 封装前端没有传递的数据
- 调用mapper插入数据库
/**
* 新增员工
* @param employeeDTO
*/
@Override
public void sava(EmployeeDTO employeeDTO) {
//1、将dto数据封装给employee对象
//使用工具类,BeanUtils.copyProperties(A,B),将A中的属性值赋值给B相同属性值,进行拷贝
Employee employee = new Employee();
BeanUtils.copyProperties(employeeDTO,employee);
//2、封装前端没有传递的数据
//密码
employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));
//状态,默认为启用
employee.setStatus(StatusConstant.ENABLE);
//创建时间、修改时间、创建人、修改人
employee.setCreateTime(LocalDateTime.now());
employee.setUpdateTime(LocalDateTime.now());
// 从ThreadLocal获取员工id
employee.setCreateUser(BaseContext.getCurrentId());
employee.setUpdateUser(BaseContext.getCurrentId());
//3、调用mapper插入数据库
employeeMapper.save(employee);
}
7、Mapper层功能实现
在com.sky. mapper中找到接口EmployeeMapper中添加方法
因为是新增员工,所以我们需要对数据库插入语句,用insert方法
@Insert("insert into sky_take_out.employee VALUES(null,#{name},#{username},#{password},#{phone},#{sex},#{idNumber},#{status},#{createTime},#{updateTime},#{createUser},#{updateUser})")
void save(Employee employee);
记得在application.yml中已开启驼峰命名
mybatis:
configuration:
#开启驼峰命名
map-underscore-to-camel-case: true