在使用 Spring Boot 开发过程中,这些术语是常见的分层架构组成部分,每一层都有特定的功能和职责。以下是这些术语的含义和它们在项目中的作用:
分层架构概述
Spring Boot 项目通常按照职责划分为以下几层:
1、Controller(控制层)
作用:处理客户端的请求,返回响应数据(如 JSON)。
关键点:
位于前端与后端的交互层。
常用注解:@RestController, @RequestMapping, @GetMapping 等。
示例
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
return "User ID: " + id;
}
}
2、Entity(实体层)
###作用:映射数据库表,表示数据对象。 ###关键点: 与数据库表结构一一对应。
常用注解:@Entity, @Table, @Id, @Column。
示例
@Entity
public class User {
@Id
private Long id;
private String name;
private String email;
// Getters and Setters
}
3、Mapper(数据访问层)
作用:负责与数据库交互(增删改查)。
关键点:
使用 MyBatis 或类似工具。
SQL 写在注解或 XML 文件中。
示例
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(Long id);
}
4、Service(业务逻辑层)
作用:处理业务逻辑,调用 Mapper 与数据库交互。
关键点:
定义接口 + 实现类(Impl)。
常用注解:@Service。
示例:
@Service
public class UserService {
public String processUserData(Long id) {
return "Processed User: " + id;
}
}
5、Impl(实现类)
作用:Service 接口的具体实现。
关键点:
通常处理复杂逻辑和多个 Mapper 的调用。
示例
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(Long id) {
return userMapper.getUserById(id);
}
}
6、XML(SQL 映射文件)
作用:存储复杂 SQL 查询(用于 MyBatis)。
关键点:
SQL 灵活性高,支持动态语句。
示例(UserMapper.xml)
<select id="getUserById" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
各层关系总结
1、Controller 处理请求,调用 Service。
2、Service 执行业务逻辑,调用 Mapper 操作数据库。
3、Mapper 直接与数据库交互,返回数据。
4、Entity 用于传递和存储数据。
简单示例
完整调用流程
// 1. Controller
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUserById(id);
}
}
// 2. Service
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Long id) {
return userMapper.getUserById(id);
}
}
// 3. Mapper
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(Long id);
}
// 4. Entity
@Entity
public class User {
@Id
private Long id;
private String name;
private String email;
// Getters and Setters
}