在 Spring Boot 项目中,Controller
、Service
、Mapper
和 Entity
层是常见的分层架构的核心组成部分,各自承担不同的职责,形成协作关系以实现业务逻辑和数据管理。
1. Controller 层
作用:
- 接收用户请求(如 HTTP 请求)。
- 调用 Service 层处理业务逻辑。
- 将处理结果返回给前端(或客户端)。
特点:
- 位于项目的最外层,负责对外提供接口。
- 使用
@RestController
或@Controller
注解。 - 通常包含与请求路径对应的
@RequestMapping
(或类似注解,如@GetMapping
、@PostMapping
等)。
示例:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
}
2. Service 层
作用:
- 处理具体的业务逻辑。
- 调用 Mapper 层进行数据操作。
- 对复杂业务进行封装,保证 Controller 层的简洁。
特点:
- 使用
@Service
注解。 - 通常是应用程序的核心层,负责协调多个数据访问或处理逻辑。
示例:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Long id) {
return userMapper.selectById(id);
}
}
3. Mapper 层
作用:
- 直接操作数据库(如查询、插入、更新、删除)。
- 提供实体对象与数据库表的映射关系。
特点:
- 使用 MyBatis 时,常使用
@Mapper
注解或者 XML 文件映射 SQL。 - 是数据访问层,直接与数据库交互。
示例:
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(Long id);
}
4. Entity 层
作用:
- 表示数据库中的表结构。
- 通常作为对象在各层之间传递。
- 用于存储和封装业务数据。
特点:
- 使用
@Entity
注解或者类似的 ORM(对象关系映射)注解。 - 通常与数据库表一一对应,字段映射表中的列。
示例:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
// Getter 和 Setter
}
层之间的联系
-
Controller → Service:
Controller 接收用户请求,调用 Service 层处理业务逻辑。
示例:UserController
调用UserService.getUserById(id)
。 -
Service → Mapper:
Service 层调用 Mapper 层方法与数据库交互,获取或修改数据。
示例:UserService
调用UserMapper.selectById(id)
。 -
Mapper → Entity:
Mapper 层将查询结果映射到 Entity 类或将 Entity 转化为数据库操作语句。
示例:UserMapper
返回一个User
对象。
架构图示意
[用户请求] → [Controller] → [Service] → [Mapper] → [数据库]
↑ ↑
返回结果 使用 Entity
特别鸣谢甲方爸爸,又让我学习新东西了.