员工管理系统 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 方法
}
踩坑
-
日期格式统一:前端传递的日期字符串格式不同导致解析错误。统一使用
yyyy-MM-dd格式,配合@DateTimeFormat注解。 -
更新操作区分"没传"和"置空":前端没传某个字段时,不能覆盖数据库已有值。使用
FieldStrategy.NOT_NULL解决——值为 null 的字段不更新。 -
删除部门的级联处理:删除部门前需要检查该部门下是否有员工,如果有则拒绝删除或提示用户确认。