在 Java 后端开发中,DAO 和 ORM 是两个经常被一起提到、但职责完全不同的概念。可以从「是什么」「做什么」「关系」三个层面来区分。
DAO 是一种设计模式,用于封装对数据库的访问逻辑,让业务代码不直接操作数据库。
findUserById)public interface UserDao {
User findById(Long id);
void save(User user);
}
public class UserDaoImpl implements UserDao {
public User findById(Long id) {
// JDBC 代码
}
}
ORM 是一种技术/框架思想,解决的是:
对象(Java 对象) ↔ 数据库表(关系型数据)之间的映射问题
@Entity
@Table(name = "user")
public class User {
@Id
private Long id;
private String name;
}
User user = session.get(User.class, 1L);
| 对比维度 | DAO | ORM |
|---|---|---|
| 本质 | 设计模式 | 技术/框架 |
| 关注点 | 数据访问结构 | 对象与表映射 |
| 是否必须 | 可选(推荐) | 可选 |
| 是否写 SQL | 可写可不写 | 通常少写或不写 |
| 使用关系 | DAO 可以使用 ORM | ORM 不一定用在 DAO 中 |
✅ DAO 和 ORM 不冲突,经常一起用
典型组合:
Service
↓
DAO(接口)
↓
ORM 框架(Hibernate / MyBatis)
↓
数据库
例如:
DAO 是解决“怎么访问数据”的结构设计,ORM 是解决“对象和表怎么对应”的技术手段。
如果你愿意,我也可以给你画一张结构图,或者用 MyBatis vs Hibernate vs DAO 的对比来进一步说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。