POJO 层(Plain Old Java Object,普通的 Java 对象)是指应用程序中的普通 Java 类,它通常用来表示业务模型或者数据模型。POJO 类通常没有复杂的逻辑,只包含字段(属性)和对应的 getter/setter 方法,作为传递数据的载体。在 Spring Boot 应用中,POJO 类通常与数据库中的表一一对应,用来接收和传递数据。
POJO 层的角色和职责:
-
数据传输对象:POJO 用来传递数据,通常在 Controller 层、Service 层、Mapper 层之间传递。它们通常作为请求和响应的载体。
-
数据库映射模型:POJO 类可以用来映射数据库中的表结构。它们的属性(字段)通常对应数据库表中的列。例如,数据库中的
users
表可以映射成User
类,表中的每一列可以对应类中的一个属性。 -
与前端交互的数据结构:在前后端分离的应用中,POJO 类通常用来接收从前端传来的请求数据(例如 JSON 数据),也可以用来将后端的数据(例如从数据库获取的用户信息)传递给前端。
-
无业务逻辑:POJO 类本身不包含业务逻辑,它们只是简单的 POJO 类,通常只负责存储数据,并通过 getter 和 setter 方法进行访问。
POJO 类的例子:
public class User {
private Long id; // 主键
private String name; // 用户名
private int age; // 用户年龄
// 无参构造器
public User() {}
// 有参构造器
public User(Long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
// Getter 和 Setter 方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// toString 方法
@Override
public String toString() {
return "User{id=" + id + ", name='" + name + "', age=" + age + "}";
}
}
POJO 类在不同层中的作用:
-
Controller 层:接收和返回前端的数据。通常会使用 POJO 类来接收前端的请求数据(例如通过
@RequestBody
接收 JSON 格式的数据),也可以用来作为响应的数据类型(例如返回 JSON 格式的数据)。Controller 示例:
@PostMapping("/user") public String createUser(@RequestBody User user) { userService.addUser(user); return "User added successfully!"; }
-
Service 层:作为数据模型来处理业务逻辑,通常接收和返回 POJO 对象。例如在增删改查操作中,Service 层可能会接收一个 POJO 类的实例,进行业务逻辑处理,然后返回 POJO 对象或集合。
Service 示例:
public User getUserById(Long id) { return userMapper.selectById(id); // 返回一个 POJO 对象 }
-
Mapper 层:POJO 类作为映射数据库表的模型,Mapper 层通常会通过注解或者 XML 文件来定义 SQL 操作,将数据库的记录映射成 POJO 对象。POJO 类的属性对应数据库表的字段。
Mapper 示例:
@Select("SELECT * FROM users WHERE id = #{id}") User selectById(Long id); // 返回一个 POJO 对象
POJO 和数据库的映射关系:
在应用中,POJO 类通常和数据库中的表一一对应。字段通常对应表中的列。MyBatis 等框架通过映射文件(XML 或注解)来实现数据库表和 POJO 类的映射。
例如,假设有一个名为 users
的数据库表:
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
这时可以创建一个 User
POJO 类来映射这个表:
public class User {
private Long id;
private String name;
private int age;
// Getter 和 Setter 方法省略...
}
POJO 类与其他层的交互:
- Controller 层通过接收请求参数(如 JSON 格式的数据)将其映射到 POJO 类。
- Service 层通过接收 POJO 类对象来进行业务处理。
- Mapper 层通过将 POJO 类映射到 SQL 语句,实现数据的增、删、改、查操作。
总结:
- POJO 层主要用于表示数据模型,它作为 Controller 层、Service 层 和 Mapper 层 之间传递数据的载体。
- POJO 类通常没有业务逻辑,只有属性、构造方法、getter 和 setter 方法。
- 在数据库交互中,POJO 类可以与数据库表一一映射,通过 ORM 框架(如 MyBatis)来实现数据的持久化操作。
POJO 类是 Spring Boot 中非常重要的一部分,它将应用中的各层解耦,并帮助实现数据的传输和映射。