在 Java 开发中,DAO(Data Access Object) 和 ORM(Object Relational Mapping) 经常被一起提到,但它们不是同一层面的概念,作用和定位也不同。下面从定义、职责、关系、区别几个方面说明。
DAO 是一种设计模式,用于把业务逻辑和数据访问逻辑分离。
public class UserDao {
public User findById(int id) {
// JDBC 代码
}
public void save(User user) {
// JDBC 代码
}
}
ORM 是一种技术/框架,用于解决对象和数据库表之间的映射问题。
@Entity
@Table(name = "user")
public class User {
@Id
private Integer id;
private String name;
}
| 对比点 | DAO | ORM |
|---|---|---|
| 本质 | 设计模式 | 技术/框架 |
| 关注点 | 数据访问结构 | 对象与表映射 |
| 是否写 SQL | 可以写也可以不写 | 通常自动生成 |
| 是否必须 | 推荐用 | 可选 |
| 层次 | 架构层面 | 实现层面 |
✅ 一句话区别:
DAO 是“怎么组织代码”,ORM 是“怎么操作数据库”。
DAO 和 ORM 不是对立的,而是可以配合使用的。
Service
↓
DAO(接口)
↓
ORM 框架(Hibernate / MyBatis)
↓
数据库
public interface UserDao extends JpaRepository<User, Integer> {
}
UserDao:DAOJpaRepository:ORM❌ “用了 MyBatis 就不需要 DAO”
✅ 仍然需要 DAO 层来组织代码
❌ “ORM 替代 DAO”
✅ ORM 是实现 DAO 的一种方式
❌ “DAO 一定要写 SQL”
✅ DAO 可以完全不写 SQL
DAO 是“分层思想”,ORM 是“实现手段”
DAO 管结构,ORM 管映射
如果你愿意,我也可以帮你画一张DAO + ORM 的架构图,或者用 MyBatis / JPA 实例对比给你看。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。