跳到正文
Joeplover
后端开发·2025-09-22·约 2 分钟阅读

员工管理系统 Ems:Spring Boot CRUD 全流程

基于 Spring Boot + MyBatis + PageHelper 的完整员工管理系统,实现分页查询、增删改查和统一结果封装。

员工管理

员工管理系统 Ems:Spring Boot CRUD 全流程

项目背景

Ems(Employee Management System)是我的第一个完整的 Spring Boot CRUD 项目。虽然现在看来功能简单,但它帮我建立了 Spring 开发的完整范式认知。

功能

员工管理:增删改查、分页、模糊搜索
部门管理:部门 CRUD、与员工的关联查询
用户管理:登录、退出、密码修改

三层架构

Controller(接收请求/返回响应)→ Service(业务逻辑)→ Mapper(数据库操作)

这个分层模式在所有 Spring 项目中都是一致的。

Controller

@RestController
@RequestMapping("/api/employees")
public class EmployeeController {
    
    @Autowired
    private EmployeeService employeeService;
    
    @GetMapping
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer size,
                       String name) {
        PageResult<Employee> result = employeeService.page(page, size, name);
        return Result.success(result);
    }
    
    @PostMapping
    public Result add(@RequestBody @Valid Employee employee) {
        employeeService.add(employee);
        return Result.success();
    }
    
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Long id) {
        employeeService.delete(id);
        return Result.success();
    }
}

Service

@Service
public class EmployeeService {
    
    @Autowired
    private EmployeeMapper employeeMapper;
    
    public PageResult<Employee> page(Integer page, Integer size, String name) {
        PageHelper.startPage(page, size);
        LambdaQueryWrapper<Employee> wrapper = Wrappers.<Employee>lambdaQuery()
            .like(StringUtils.isNotBlank(name), Employee::getName, name);
        List<Employee> list = employeeMapper.selectList(wrapper);
        return new PageResult<>(new PageInfo<>(list));
    }
}

Mapper

@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {
    // 继承 BaseMapper 后自动获得 CRUD 方法
}

踩坑

  1. 日期格式统一:前端传递的日期字符串格式不同导致解析错误。统一使用 yyyy-MM-dd 格式,配合 @DateTimeFormat 注解。

  2. 更新操作区分"没传"和"置空":前端没传某个字段时,不能覆盖数据库已有值。使用 FieldStrategy.NOT_NULL 解决——值为 null 的字段不更新。

  3. 删除部门的级联处理:删除部门前需要检查该部门下是否有员工,如果有则拒绝删除或提示用户确认。