在 Java 开发中,DAO 和 ORM 是两个经常一起出现、但概念层级不同的东西。可以从“做什么”和“怎么做”来理解它们的区别。
DAO 是一种设计模式(思想 / 架构方式)
目的是:把“业务逻辑”和“数据访问逻辑”分开。
public interface UserDao {
User findById(Long id);
void save(User user);
void delete(Long id);
}
✅ DAO 不是技术,而是模式
ORM 是一种技术 / 框架方案
目的是:把数据库表和 Java 对象自动映射起来。
示例(Hibernate):
User user = entityManager.find(User.class, 1L);
✅ ORM 是具体实现技术
而是:DAO 可以用 ORM 来实现
常见组合:
| 层级 | 技术 |
|---|---|
| DAO 接口 | 设计模式 |
| DAO 实现 | Hibernate / MyBatis |
| ORM | 底层映射工具 |
例如:
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private UserRepository repository; // ORM
public User findById(Long id) {
return repository.findById(id).orElse(null);
}
}
| 对比项 | DAO | ORM |
|---|---|---|
| 本质 | 设计模式 | 技术框架 |
| 关注点 | 数据访问结构 | 对象与表映射 |
| 是否必须 | 可选(推荐) | 可选 |
| 是否写 SQL | 不一定 | 通常少写 |
| 例子 | UserDao | Hibernate |
DAO 决定“怎么分层访问数据”,ORM 决定“怎么把对象和数据库连起来”。
如果你愿意,我也可以结合 MyBatis vs Hibernate + DAO 给你一个实际项目示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。