Controller层
Controller层(有时也被称为Web层或表示层)是处理HTTP请求的入口点。它的主要职责是:
接收来自客户端(如浏览器或其他HTTP客户端)的请求。
调用Service层的方法来处理业务逻辑。
返回响应给客户端,通常是以HTML、JSON或XML格式。
处理异常和错误,并将适当的错误消息返回给客户端。
可以进行数据的简单转换和格式化,以符合客户端的需求。
Controller类通常使用Spring MVC的注解,如@RestController、@RequestMapping、@GetMapping、@PostMapping等,来定义路由和处理HTTP方法。
职责
- 接收HTTP请求并返回响应。
- 调用Service层处理业务逻辑。
- 处理异常并返回适当的错误消息。
-
示例代码
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public ResponseEntity<UserDTO> getUserById(@PathVariable Long id) {
UserDTO user = userService.getUserById(id);
return ResponseEntity.ok(user);
}
@PostMapping
public ResponseEntity<UserDTO> createUser(@RequestBody UserDTO userDTO) {
UserDTO createdUser = userService.createUser(userDTO);
return ResponseEntity.status(HttpStatus.CREATED).body(createdUser);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
}
Service层
Service层(也被称为业务逻辑层)是应用程序的核心,它包含了执行特定业务任务的逻辑。它的主要职责是:
实现应用程序的业务逻辑。
调用Mapper层(或DAO层)的方法来与数据库交互。
执行数据验证和转换。
处理业务规则和逻辑。
管理事务。
可以调用其他服务(如外部API)来执行集成操作。
Service类通常不包含与特定HTTP方法或路由相关的代码,而是专注于实现可重用的业务功能。
职责
- 实现业务逻辑。
- 调用Mapper层与数据库交互。
- 处理业务规则和验证。
示例代码
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public UserDTO getUserById(Long id) {
User user = userMapper.findById(id);
return convertToDTO(user);
}
public UserDTO createUser(UserDTO userDTO) {
User user = convertToEntity(userDTO);
userMapper.insert(user);
return convertToDTO(user);
}
private UserDTO convertToDTO(User user) {
// 转换逻辑
}
private User convertToEntity(UserDTO userDTO) {
// 转换逻辑
}
}
Mapper层
Mapper层(也被称为数据访问层或DAO层)负责与数据库交互。它的主要职责是:
定义与数据库表对应的接口。
使用MyBatis的注解或XML映射文件来编写SQL语句。
执行CRUD(创建、读取、更新、删除)操作。
处理数据库连接和事务。
将数据库查询结果映射到Java对象(实体或DTO)。
职责
- 定义与数据库表对应的接口。
- 编写SQL语句并执行CRUD操作。
- 处理数据库连接和事务。
示例代码
@Mapper
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User findById(Long id);
@Insert("INSERT INTO users(name, email) VALUES(#{name}, #{email})")
void insert(User user);
// 其他CRUD操作
}
总结
以上代码展示了一个简单的用户管理模块的结构。每一层都有明确的职责,确保了代码的可维护性和可扩展性。通过使用Spring MVC的注解,Controller层处理HTTP请求,Service层负责业务逻辑,Mapper层则与数据库进行交互。这样的分层架构使得应用程序更易于测试和管理。