需求分析

业务规则

  1. 根据页码展示员工信息
  2. 每页展示10条数据
  3. 分页查询时可以根据需要输入员工姓名进行查询

代码开发

  1. 根据分页查询的接口设计对应的DTO
    设计 EmployeePageQueryDTO.class
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package com.sky.dto;

    import lombok.Data;

    import java.io.Serializable;

    @Data
    public class EmployeePageQueryDTO implements Serializable {

    //员工姓名
    private String name;

    //页码
    private int page;

    //每页显示记录数
    private int pageSize;

    }

  2. 后面的所有分页查询都统一封装为 PageResult 对象
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package com.sky.result;

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;

    import java.io.Serializable;
    import java.util.List;

    /**
    * 封装分页查询结果
    */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class PageResult implements Serializable {

    private long total; //总记录数

    private List records; //当前页数据集合

    }

代码完善——日期

  1. 方式一: 在属性上加注解,对日期进行格式化————一个注解只能对一个属性进行处理
    1
    2
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
  2. 方式二: 在 WebMvcConfiguration 中扩展 Spring MVC 的消息转换器统一对日期进行处理.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /**
    * 扩展mvc框架的消息转换器 日期类型的格式化
    * @param converters
    */
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
    log.info("开始扩展消息转换器...");
    //创建一个消息转换器对象
    MappingJackson2HttpMessageConverter converter=new MappingJackson2HttpMessageConverter();
    //设置对象转换器,可以将java对象转换为json字符
    converter.setObjectMapper(new JacksonObjectMapper());
    //将我们自己的转换器放入spring mvc 框架的容器中
    converters.add(0,converter);

    }

启用禁用员工账号

业务规则

  1. 可以对状态为“启用”的员工账号进行“禁用”操作
  2. 可以对状态为“禁用”的员工账号进行“启用”操作
  3. 状态为“禁用”的员工不能登录系统

代码开发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
* 在EmployeeController.java中
* 禁用OR启用 请求方式为post
* @param status 路径参数 @PathVariable
* @param id
* @return
*/
@PostMapping("/status/{status}") //因为status名子一样所以不需要@PathVariable("status")
@ApiOperation("启用禁用员工账号")
public Result trartOrStop(@PathVariable Integer status,long id){
log.info("启用禁用员工账号:{},{}",status,id);
employeeService.startOrStop(status,id);
return Result.success();
}
/**
* 在EmployeeServiceImp.java中
* 启用禁用员工账号
* @param status
* @param id
*/
public void startOrStop(Integer status, long id) {
//update employee set status = ? whele id = ?

/*Employee employee = new Employee();
employee.setId(id);
employee.setStatus(status);*/
Employee employee=Employee.builder()
.id(id)
.status(status)
.build();



employeeMapper.update(employee);
}
/**
* 在EmployyServiceImp.java
* 启用禁用员工账号
* @param status
* @param id
*/
public void startOrStop(Integer status, long id) {
//update employee set status = ? whele id = ?

/*Employee employee = new Employee();
employee.setId(id);
employee.setStatus(status);*/
Employee employee=Employee.builder()
.id(id)
.status(status)
.build();



employeeMapper.update(employee);
}

编写动态sql语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<update id="update">
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="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>

编辑员工信息

编辑员工功能涉及到的两个接口

  1. 根据id查询员工信息
  2. 编辑员工信息

代码开发

EmployeeController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* 根据id查员工
* @param id
* @return
*/
@GetMapping("/{id}")
@ApiOperation("根据id查员工")
public Result<Employee> getById(@PathVariable Long id){
Employee enployee=employeeService.getById(id);
return Result.success(enployee);
}

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

EmployeeServiceImp.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 根据id查员工
* @return
*/

public Employee getById(Long id) {
Employee employee=employeeMapper.getById(id);
employee.setPassword("*******");
return employee;
}

/**
* 更新员工信息
* @param employeeDTO
*/
public void update(EmployeeDTO employeeDTO) {
Employee employee=new Employee();
BeanUtils.copyProperties(employeeDTO,employee);
//employee.setUpdateTime(LocalDateTime.now());
//employee.setUpdateUser(BaseContext.getCurrentId());
employeeMapper.update(employee);
}

EmployeeMapper.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 根据主键动态修改我们的属性
* @AutoFill----自动填充日期
* @param employee
*/
@AutoFill(value = OperationType.UPDATE)
void update(Employee employee);

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