在Java中,常用的多层架构模式是MVC(Model-View-Controller),其中涉及到的代码层级包括Controller、Service、Mapper/DAO
1、Controller层
负责接收用户的请求,处理用户的输入,并将结果返回给用户。其作用是将用户的请求转发给Service层进行处理,并将Service层返回的结果进行相应的封装和返回给前端页面或客户端。
示例代码:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUserById(@PathVariable("id") Long id) {
return userService.getUserById(id);
}
@PostMapping("/")
public User createUser(@RequestBody UserDto userDto) {
return userService.createUser(userDto);
}
}
----------------------------对get、post请求中的相关注解进行拓展(开始)---------------------------------------
@PathVariable(“id”)可以直接获取请求中的参数
如果不使用@PathVariable(“id”),就需要通过HttpServletRequest来获取请求中的参数
HttpServletRequest使用示例
@GetMapping("/user")
public User getUserById(HttpServletRequest request) {
int id = Integer.parseInt(request.getParameter("id"));
// 根据id查询用户
User user = userService.getUserById(id);
return user;
}
@PathVariable通常用于GET请求,@RequestBody通常用于POST请求
@PathVariable获取的是url路径中的参数,@RequestBody获取的是请求体中的参数
对于post请求,获取参数的方式有@RequestBody和@RequestParam两种,@RequestParam从请求中获取单个参数的值;
@GetMapping("/example")
public void example(@RequestParam String name) {
// 对 name 参数进行处理
}
@RequestBody用于从请求中获取请求体的内容,并将其转换为指定类型的对象,通常用于接收 JSON 或 XML 格式的请求数据,然后将其转换为对象进行处理。
@PostMapping("/example")
public void example(@RequestBody User user) {
// 对 user 对象进行处理
}
----------------------------对get、post请求中的相关注解进行拓展(结束)---------------------------------------
2. Service层
负责实现业务逻辑。其作用是对业务逻辑进行处理,包括数据校验、数据处理、业务计算等。Service层通常通过调用Mapper/DAO层的接口来访问数据库,并对数据库操作进行封装。
示例代码:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Long id) {
return userMapper.getUserById(id);
}
@Transactional
public User createUser(UserDto userDto) {
// 进行数据校验和处理
User user = new User();
user.setName(userDto.getName());
// ...其他逻辑
// 调用Mapper/DAO层进行数据持久化
userMapper.insert(user);
return user;
}
}
- Mapper/DAO层:负责数据的访问和操作。其作用是与数据库进行交互,进行增、删、改、查等操作。
示例代码:
@Mapper
public interface UserMapper {
User getUserById(Long id);
void insert(User user);
void update(User user);
void delete(Long id);
}
通过以上三层之间的结构和调用关系,可以实现数据的请求和处理的分离,提高代码的可维护性和可扩展性。