目录
员工管理:
删除员工:
Controller层:
Service层:
Mapper接口:
接受参数的两种方式:
修改员工:
查询回显:
Controller层:
Service层:
Mapper接口:
修改数据:
Controller层:
Service层:
Mapper接口:
程序优化:
员工信息统计:
职位统计开发
Controller层:
Service层:
Mapper接口:
性别统计:
明确三层架构职责:
1.接受参数(ID值)
2.调用Service层
3.响应结果
1.调用Mapper接口方法,批量删除员工基本信息
2.调用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
明确三层架构职责:
1.接受参数(ID值)
2.调用Service层
3.响应结果
1.调用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手动封装
明确三层架构职责:
1.接受参数
2.调用Service层
3.响应结果
1.根据ID修改员工的基本信息
2.根据ID修改工作经历信息(先删除再添加)
执行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
明确三层架构职责:
1.接受参数
2.调用Service层
3.响应结果
1.调用mapper方法获取职位统计数据
2.解析数据封装统计结果(JobOption)
执行SQL语句
Controller层:
@GetMapping("/empJobDate")
public Result getEmpJobDate(){
log.info("统计各个职位的员工人数");
JobOption jobOption = reportService.getEmpJobData();
return Reult.success(jobOption);
}
Service层:
public JobOption getEmpJobData(){
List
Mapper层:
Controller层:
@GetMapping("/empGenderData")
public Result getEmpGenderData(){
log.info("统计员工信息");
List
Service层:
@Override
public List
Mapper层:
//统计员工的性别信息
if流程控制函数:
if(expr,val1,val2):如果表达式expr成立,取val1,否则取val2
ifnull(expr,val):如果expr不为null,取自身,否则取val1