1. 对象模型基础概念解析
在Java企业级开发中,我们经常会遇到各种以"O"结尾的缩写对象(POJO、PO、DTO等)。这些概念看似简单,但在实际项目中如果混用或误用,轻则导致代码可读性下降,重则引发严重的架构问题。作为从业十年的老码农,我见过太多因为对象模型混乱导致的"祖传代码"。
先看个真实案例:某电商系统将数据库查询结果直接作为API响应对象,导致暴露了用户余额字段;另一个OA系统把前端传回的DTO直接用作持久化对象,结果特殊字符引发SQL注入。这些问题的根源都在于没有正确理解不同对象模型的职责边界。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心对象类型详解
2.1 POJO(Plain Old Java Object)
POJO是Martin Fowler在2000年提出的概念,特指没有继承特定框架类、没有实现特殊接口的普通Java对象。它的核心特征包括:
- 不依赖任何外部框架
- 不实现特殊接口(如EJB的EntityBean)
- 不包含注解(早期定义,现在有所放宽)
典型POJO示例:
java复制public class User {
private String name;
private int age;
// 标准的getter/setter
}
重要提示:现代开发中,带有JPA/Hibernate注解的类本质上仍算POJO,这是概念的发展演变
2.2 PO(Persistent Object)
PO是专门用于持久化的对象模型,与数据库表存在严格映射关系。在MyBatis中通常对应mapper.xml的结果映射,在JPA中对应@Entity注解类。
PO的核心特征:
- 与数据库表一一对应
- 包含完整的字段映射
- 通常不包含业务逻辑
JPA实体示例:
java复制@Entity
@Table(name = "t_user")
public class UserPO {
@Id
@GeneratedValue
private Long id;
@Column(name = "user_name")
private String username;
// 其他字段和getter/setter
}
