【gopher的java学习笔记】一文讲懂controller,service,mapper,entity是什么
刚开始上手Java和Spring时,就被controller,service,mapper,entity这几个词搞懵了,搞不懂这些究竟代表什么,感觉使用golang开发的时候也没太接触过这些名词啊~
经过两三个月的开发后,逐渐搞懂了这几个词的意义,也对为什么要这么分有了一点见解,总结了一下希望能帮到各位刚刚接触Java和Spring的同学。
组件介绍
-
Entity(实体)
- 作用:代表数据库中的表结构,是数据模型的基本单元。通常包含属性和这些属性的getter/setter方法。可以简单理解成就是数据库表在代码里面定义一遍。
- 示例:用户实体类
User
,包含用户ID、用户名、密码等字段。
-
Mapper(映射器)
- 作用:负责将Entity对象与数据库记录进行映射,执行CRUD(创建、读取、更新、删除)操作。在MyBatis等ORM框架中,Mapper通常是一个Interface。简单来说,就是如何对Entity进行增删改查,比如对age是某个范围的Entity进行count,这种就可以通过SQL在Mapper层实现。
- 示例:
UserMapper
接口,定义与用户表相关的SQL操作。
-
Service(服务)
- 作用:包含业务逻辑,是Controller和Mapper之间的桥梁。处理复杂的业务逻辑,调用一个或多个Mapper。比如开发一个在线学习平台时,查询用户的学习情况可能就需要同时调用“用户”的Mapper(获取用户对某个课程id的课程的学习信息,比如是否已学习、学习进度等)和“课程”的Mapper(获取某个课程id的详细课程信息,比如课程标题、课程封面)来一起组合出用户学习过的课程的信息,这一部分逻辑就可以在Service层实现。
- 示例:
UserService
类,包含用户注册、登录、更新信息等业务逻辑。
-
Controller(控制器)
- 作用:接收客户端请求,调用Service层处理请求,返回处理结果。通常负责处理HTTP请求和响应。简单来说就是实现RestApi对外暴露业务。
- 示例:
UserController
类,处理与用户相关的HTTP请求,如注册、登录请求。
简单业务示例:用户注册
假设我们正在开发一个简单的用户管理系统,其中包含用户注册功能。
Entity
public class User {
private Long id;
private String username;
private String password;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Mapper
public interface UserMapper {
void insertUser(User user);
// 其他CRUD方法...
}
(在实际使用中,如果是MyBatis,这里会是一个接口,SQL语句会通过XML或注解定义。)
Service
public class UserService {
private UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
public void registerUser(String username, String password) {
User user = new User();
user.setUsername(username);
user.setPassword(password); // 实际应用中应加密处理
userMapper.insertUser(user);
}
}
Controller
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
public class UserController {
private UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping("/register")
public String register(@RequestParam String username, @RequestParam String password) {
userService.registerUser(username, password);
return "User registered successfully!";
}
}
说明
- Entity:
User
类代表用户表,包含基本的用户信息。 - Mapper:
UserMapper
接口定义了插入用户的方法。实际实现(如SQL语句)会根据使用的ORM框架不同而有所差异。 - Service:
UserService
类包含用户注册的业务逻辑,即创建一个新用户并调用Mapper插入到数据库。 - Controller:
UserController
类处理用户注册的HTTP POST请求,调用UserService
完成注册。
这个示例展示了如何通过分层架构组织代码,使每一层都有明确的职责,便于维护和扩展。