员工管理(3)-删除员工-修改员工-全局异常处理器-员工信息统计

目录

员工管理:

删除员工:

Controller层:

Service层:

Mapper接口:

接受参数的两种方式:

修改员工:

查询回显:

Controller层:

Service层:

Mapper接口:

修改数据:

Controller层:

Service层:

Mapper接口:

程序优化:

员工信息统计:

职位统计开发

Controller层:

Service层:

Mapper接口:

性别统计:


员工管理:

删除员工:

明确三层架构职责:

Controller层:


1.接受参数(ID值)

2.调用Service层

3.响应结果

Service层:

1.调用Mapper接口方法,批量删除员工基本信息

2.调用Mapper接口方法,批量删除员工的工作经历信息

Mapper接口:

执行SQL语句

接受参数的两种方式:

方式一:在Controller方法中通过数组来接收

@DeleteMapping
public Result delete(Integer[] ids){
  log.info("根据id删除员工:{}",ids);
  return Result.success();
}

方法二:在Controller方法中通过集合来接收

public Result delete(@RequestParam List ids){
  log.info("根据id批量删除员工:{}",ids);
  return Result。success();
}

Service层:

@Transactional(rollbackFor = {Exception.class})
public void deleteByIds(List ids){
  //1.根据ID删除员工基本信息
  empMapper.deleteByIds(ids);
  //2.根据ID删除员工的工作经历
  empExprMapper.deleteByEmpIds(ids);
}

Mapper层xml:

//根据ID批量删除员工信息

  delete from emp where id in
  
    #{id}
   


//根据员工ID批量删除员工工作经历信息

  delete from emp_expr where emp_id in
  

修改员工:

查询回显:

明确三层架构职责:

Controller层:


1.接受参数(ID值)

2.调用Service层

3.响应结果

Service层:

1.调用Mapper接口方法,查询员工详细信息

Mapper接口:

执行SQL语句

方法实现:

Controller层:

//根据ID查询员工信息
@GetMapping("/{id}")
public Result getInfo(@PathVariable Integer id){
  log.info("根据ID查询员工信息:{}",id);
  Emp emp = empService.getInfo(id);
  return Result.success(emp);
}

Service层:

@Override
public Emp getInfo(Integer id){
  return empMapper.getById(id);
}

Mapper层:

//根据ID查询员工基本信息及员工的工作经历信息


//定义ResultMap手动封装属性

  
  
  
  
  
  
  
  
  
  
  
  
  

//封装工作经历信息
  
    
    
    
    
    
    
  

    
  

因为实体类里面有对象也有属性所以需要resultMap手动封装

如果查询返回的字段名与实体的属性名可以直接对应上,用resultType

如果查询返回的字段名和实体的属性名对应不上,或实体属性比较复杂,也可以通过resultMap手动封装

修改数据:

明确三层架构职责:

Controller层:


1.接受参数

2.调用Service层

3.响应结果

Service层:

1.根据ID修改员工的基本信息

2.根据ID修改工作经历信息(先删除再添加)

Mapper接口:

执行SQL语句

方法实现:

Controller层:

@PutMapping
public Result update(@RequestBody Emp emp){
  log.info("修改员工:{}",emp);
  empService.update(emp);
  return Result.success();
}

Service层:

@Override
public void update(Emp emp){
  //1.根据ID修改员工的基本信息
  emp.setUpdateTime(LocalDateTime.now());
  empMapper.updateById(emp);
  //2.根据ID修改员工的工作经历信息
  //2.1 先根据员工ID删除原有的工作经历
  empExprMapper.deleteByEmpIds(Arrays.asList(emp.getId()));
  
  //2.2 再添加这个员工新的工作经历
  List exprList = emp.getExprList();
  if(!CollectionUtils.isEmpty(exprList)){
    exprList.forEach(empExpr -> empExpr.setEmpId(emp.getId)));
    empExprMapper.insertBatch(exprList);
}
}

Mapper层:

//根据ID更新员工基本信息

  UPDATE emp
  SET
    username = #{username}
    password = #{password}
    name = #{name}
    gender = #{gender}
    phone = #{phone}
    job = #{job}
    salary = #{salary}
    image = #{image}
    entry_date = #{entryDate}
    dept_id = #{deptId}
    update_time = #{updateTime}
  WHERE id = #{id}

程序优化:

使用set标签:自动生成set关键字,自动删掉更新字段后多余的逗号


  UPDATE emp
  
    username = #{username},
    password = #{password},
    name = #{name},
    gender = #{gender},
    phone = #{phone},
    salary = #{salary},
    image = #{image},
    entry_date = #{entryDate},
    dept_id = #{deptId},
    update_time = #{updateTime},
  
  WHERE id = #{id}

全局异常处理器:

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler{
  @ExceptionHandler
  public Result handleException(Exception e){
    log.errpr("全局异常处理,拦截到异常",e);
    return Result.error("对不起,服务器异常,请稍后重试");
}
}

@RestControllerAdvice = @ControllerAdvice + @ResponseBody

员工信息统计:

case函数:

case when 条件表达式1 then result1 when 条件表达式2 then result2 ... else ... end

职位统计开发

明确三层架构职责:

Controller层:


1.接受参数

2.调用Service层

3.响应结果

Service层:

1.调用mapper方法获取职位统计数据

2.解析数据封装统计结果(JobOption)

Mapper接口:

执行SQL语句

Controller层:

@GetMapping("/empJobDate")
public Result getEmpJobDate(){
  log.info("统计各个职位的员工人数");
  JobOption jobOption = reportService.getEmpJobData();
  return Reult.success(jobOption);
}

Service层:

public JobOption getEmpJobData(){
  List> list = empMapper.countEmpJobData();
  List jobList = list.stream().map(dataMap -> dataMap.get("pos")).toList();
  List dataList = list.stream().map(dataMap -> dataMap.get(""num)).toList();
  return new JobOption(jobList,dataList);
} 
  

Mapper层:

性别统计:

Controller层:

@GetMapping("/empGenderData")
public Result getEmpGenderData(){
  log.info("统计员工信息");
  List genderList = reportService.getEmpGenderData();
  return Result.success(genderList);
}

Service层:

@Override
public List getEmpGenderData(){
  return empMapper.countEmpGenderData();
}

Mapper层:

//统计员工的性别信息