“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

DAO 已死在 JPA 手上?

  • 2007-09-16
  • 本文字数:1009 字

    阅读完需:约 3 分钟

最近有人讨论到 Java Persistence API (JPA)是否已经杀死了 Data Access Object (DAO)。JPA 定义了将普通 Java 对象(有些人称之为 POJO)持久化到数据存储的接口。它大致上提供了与 Hibernate 之类相似的对象—关系映射。而 DAO 简单来说,可以总结为:

数据访问对象(DAO)是一种软件组件,它在应用程序与一个或多个数据存储设备(如数据库或文件)之间提供了一种通用的接口。

多数讨论的参与者都选择了各自的立场。其中一方,也是讨论的发起者 Adam Bien 认为:

……用法没法再简单了。只要把 EntityManager 注入到 bean 类……DAO 模式对于一般的数据访问不再有意义,不过某些数据访问还是需要它,比如访问存储过程、纯文件等……

几天之后, Magle 反驳说 DAO 还活得好好的,

上星期有些言论和博客文章谈论 DAO 模式的终结,特别联系到了 EJB 3 及其 EntityManager 的崛起。他们提议在你的面向业务的服务里直接使用 EntityManager,不必再把数据访问逻辑包装到 DAO 里面。我强烈反对这种意见……

Magle 接着解释了他的观点,并特别点出以下几个关键问题:

在对《 JPA/EJB3 Killed the DAO 》的补充帖子里,Adam Bien 进一步阐明了他认为 DAO 不再有必要的理由,

DAO 模式可以看成是“数据服务层”,它封装了特殊的而且常常是专用的数据访问实现。这样一层的主要目的为了让你独立于特定的数据库和 OR 映射实现。但即使是从前,我也从来没试过需要替换数据库,甚至从没试过从 SQL 换到 LDAP。
在有些情况下,例如要封装遗留系统,层次是不可改变的。照我的看法,在 Java EE 5 里面,DAO 可以被大大优化(直到消失掉:-))。DAO 接口、实现和工厂以及实际的 Session Bean 可以被压缩到一起。当然我们可以争辩依赖于 EJB 3 到底好不好,但为什么不呢?仅仅是因为 @Stateless 标注?

每个帖子都有大量的评论在添柴,比如 WarpedJavaGuy 说:

DAO 还长命着呢。持久化跟数据访问并不完全是一回事。

另一方的 Antonio Goncalves 回复说:

Java EE 的痛处是那些一遍又一遍重复的无聊代码,变成了反模式的设计模式,复杂性等等。在 EJB 里使用 EntitManager 的 CRUD 操作对我来说完全没有问题。对于简单的应用,我会跳过 DAO 模式……

总而言之,一般的公论是取决于应用和需求。 Adam 总结说

我会说:看情况。取决于你的应用到底有多复杂。

查看英文原文: Has JPA Killed the DAO?

2007-09-16 21:371449
用户头像

发布了 225 篇内容, 共 60.5 次阅读, 收获喜欢 49 次。

关注

评论

发布
暂无评论
发现更多内容

ReentrantLock 中的 4 个坑!

王磊

Java 并发 lock 8月日更

Web框架Gin | Gin 路由

xcbeyond

Go 语言 路由 gin 8月日更

QDS06 Iperf 测网速

耳东@Erdong

8月日更 qds iperf

腾讯三面落马+拒网易、CVTE后,字节四面成功拿下offer

编程菌

Java 编程 程序员 面试 计算机

GitHub上火了这份堪称神级的SpringBoot手册,竟出自滴滴之手

Java~~~

Java 架构 面试 微服务 Spring Boot

在科技圈流行的冥想,为什么没有全民推广?

脑极体

【前端 · 面试 】JavaScript 之你不一定会的基础题(二)

编程三昧

JavaScript 面试 大前端 事件 8月日更

与外部系统的读写交互(八)

数据与智能

flink kafka Cassandra

百度程序员:面试官看过我的博客,所以没敢问我多线程

今晚早点睡

Java 百度 程序员 面试 计算机

架构实战营毕业总结

9527

#架构实战营

前端之算法(三)归并排序

Augus

数据结构与算法 8月日更

让GitHub炸锅的深入理解MySQL实战手册,竟出自阿里云“藏经阁”

Java~~~

Java MySQL 数据库 架构 面试

了,来了!Nacos 2.0的Spring Boot Starter终于来了

Summer

Java 学习 程序员 架构 springboot

网络攻防学习笔记 Day104

穿过生命散发芬芳

态势感知 网络攻防 8月日更

【得物技术】初探 OpenResty

得物技术

nginx 性能 openresty tengine

干货分享!通过Dapr快速落地DDD,实现高并发

行云创新

Django QuerySet 就学那么一点点,一点点就够了

梦想橡皮擦

8月日更

出自清华大神之手的JVM实战手册,刚上架GitHub点赞就达到85k

Java~~~

Java 架构 面试 JVM 多线程

红黑树的理解与 Java 实现

编程菌

Java 编程 程序员 计算机 技术宅

使用Golang上传文件到MinIO对象存储(一)

liuzhen007

8月日更

阿里首本凤凰架构竟要付费,构建大型分布式系统的指南这么宝贵吗

Java~~~

Java 架构 面试 分布式 高并发

360搜索宣布下线“明星人气排行榜”:饭圈文化不是洪水猛兽

石头IT视角

面向用户的产品进度汇报会

boshi

项目管理 客户

爆赞!GitHub上首本IntelliJ IDEA操作手册,标星果然百万名不虚传

Java~~~

Java 架构 面试 IDEA 架构师

腾讯三面:哨兵挂了,Redis还能正常工作吗?

Summer

Java redis 学习 程序员 架构

SQL的执行计划-->explain

卢卡多多

sql 8月日更

Linux之telnet命令

入门小站

Linux

JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么

Summer

Java 学习 程序员 架构 jdk

低耦合、高内聚?

escray

学习 极客时间 如何落地业务建模 8月日更

终于有人把操作系统、网络系统、线程进程、IO模型全部总结出来了

Java~~~

Java 架构 面试 TCP 网络

你的孩子爱读书吗

箭上有毒

8月日更

DAO已死在JPA手上?_Java_Craig Wickesser_InfoQ精选文章