第二章 员工管理

38 阅读2分钟

image.png

为什么要使用DTO,而不是直接使用实体类?

为了精确封装,只携带自己需要的属性,避免数据泄露。

如果是json数据,在接收时,函数括号里要添加@RequestBody 注解

// 对象属性拷贝,节省代码。必须属性名一致。
BeanUtils.copyProperties(employeeDTO,employee);

怎么样在写代码时自动提示数据库内容? 首先在idea连接mysql数据库,

然后按照截图操作。

image.png

新增员工时怎么获得当前用户的信息?

拦截器时保存到threadlocal,需要时提取。

image.png

image.png ThreadLocal

接口开发流程:

拿到前端请求地址,根据前端传输的数据来决定怎么接受,调用service层完成业务。

新增员工

接口分析

  • 请求路径:/admin/employee
  • 请求方式: POST
  • 传入数据: EmployeeDTO
  • 写入数据: Employee

左边是Employee,右边是DTO。需要在service层进行数据的封装,最后把数据存入数据库。 image.png

代码实现

EmployeeController.java

@ApiOperation(value = "员工新建")
@PostMapping
public Result save(@RequestBody EmployeeDTO employeeDTO){
    employeeService.save(employeeDTO);
    return Result.success();
}

EmployeeService.java

void save(EmployeeDTO employeeDTO);

EmployeeServiceImpl.java

@Override
public void save(EmployeeDTO employeeDTO){
    Employee employee = new Employee();
    // 对象属性拷贝,节省代码。必须属性名一致。
    BeanUtils.copyProperties(employeeDTO,employee);
    // 设置账号状态,默认正常。使用常量避免硬编码。
    employee.setStatus(StatusConstant.ENABLE);
    // 设置密码,默认密码123456
    employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));
    //属性封装好,存入数据库
    employeeMapper.insert(employee);
}

EmployeeMapper.java

@AutoFill(value = OperationType.INSERT)
void insert(Employee employee);

EmployeeMapper.xml

<insert id="insert">
    insert into employee(name, username, password, phone, sex, id_number,
                 create_time,update_time, create_user, update_user,status)
    values (#{name},#{username},#{password},#{phone},#{sex},#{idNumber},
            #{createTime},#{updateTime},#{createUser},#{updateUser},#{status})
</insert>

员工登录

员工注销

员工分页查询

image.png

image.png

接口分析

  • 请求路径:/admin/employee/page
  • 请求方式: GET
  • 传入数据: EmployeePageQueryDTO
  • 返回数据: PageResult

代码实现

EmployeeController.java

@ApiOperation(value = "员工分页查询")
@GetMapping("/page")
public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO) {
    log.info("员工分页查询",employeePageQueryDTO);
    PageResult result = employeeService.pageQuery(employeePageQueryDTO);
    return Result.success(result);
}

EmployeeService.java

PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO);

EmployeeServiceImpl.java

@Override
public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) {
    // 使用pagehelper,这里插件直接可以划定了页码和条数,在mappper层只查询名称
    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);
}

EmployeeMapper.java

Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO);

EmployeeMapper.xml

<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>

员工停用

接口分析

  • 请求路径:/admin/employee/status/{status}
  • 请求方式: POST
  • 传入数据: EmployeePageQueryDTO
  • 返回数据: PageResult

这里发送的请求是/admin/employee/status/1?id=3,为什么只写{status}

代码实现

EmployeeController.java

@ApiOperation(value = "员工停用")
@PostMapping("/status/{status}")
public Result startOrStop(@PathVariable Integer status, Long id){
    log.info("启用禁用员工账号,{},{}",status,id);
    employeeService.startOrStop(status,id);
    return Result.success();
}

EmployeeService.java

void startOrStop(Integer status, Long id);

EmployeeServiceImpl.java

@Override
public void startOrStop(Integer status, Long id) {
    Employee employee = Employee.builder().status(status).id(id).build();
    employeeMapper.update(employee);
}

EmployeeMapper.java

@AutoFill(value = OperationType.UPDATE)
void update(Employee employee);

EmployeeMapper.xml

<!--    修改用户-->
<update id="update" parameterType="Employee">
    update employee
    <set>
        <if test="name!=null"> name = #{name}, </if>
        <if test="password!=null"> password = #{password}, </if>
        <if test="username!=null"> username = #{username}, </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="updateTime!=null"> update_Time = #{updateTime}, </if>
        <if test="updateUser!=null"> update_User = #{updateUser}, </if>
        <if test="status!=null"> status = #{status}, </if>
    </set>
    where id = #{id}
</update>

员工信息查询(回显)

员工信息修改