文章目录
- 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



















