我在SourceForge上处理JBJF项目,我们希望改进此框架的数据库访问。目前,它是半灵活的,但访问是在任务级别完成的。
我们想设置一种简单的接口,它本质上是通用的,可以托管JBJF的数据库访问。因此,Framework类不关心什么样的数据库,它们只调用getConnection()这样的方法,并返回java.sql.Connection对象。
我想知道什么是更适合的,一个典型的DAO层具有单个接口或插件类型结构,我们在XML文件中配置数据库服务,并且Framework在启动时加载插件。
TIA,
adym
答案 0 :(得分:1)
如何抽象所有这些并使用JPA
答案 1 :(得分:1)
在不知道细节的情况下很难说,但总的来说,我不会编写自己的框架,而是使用Hibernate或类似的ORM工具。它已经定义了XML用于将对象映射到表和返回,可以轻松地交换进/出不同的数据库实现,并且通常是用于执行此类操作的很好的工具。
答案 2 :(得分:1)
您列出的两个选项并不相互排斥;你可以有一个DAO / Repository层,你可以通过一些接口/ API访问,而具体的实现是在运行时注入的,以满足你的依赖。
例如,编写 WidgetRepository 接口,该接口定义数据访问API的小部件部分。然后,您可以提供实现您的界面的 FileSystemWidgetRepository , HibernateWidgetRepository , XmlWidgetRepository , JpaWidgetRepository 等。
一般规则是尽可能使用尽可能高的抽象级别,同时仍满足您的要求。在我给出的示例列表中,基于JPA的存储库将是最高级别,因为它甚至抽象了ORM框架。
然后,您可以在对象中保留 WidgetRepository 引用,并使用它。仅针对此接口的代码。接下来,建立一个Dependency Injection框架,如Spring,它将在运行时根据一些XML配置或自动布线机制注入一个具体的 WidgetRepository 实现。
答案 3 :(得分:0)
我开始认为Hibernate已经变得过于庞大和臃肿,但我最近使用最新的3.5版本和使用JPA进行了一个项目,他们肯定会减少它并使它比一些更好。其他3.x版本。我推荐使用Hibernate的JPA: - )
这种方法的一大优点是Hibernate在处理多种不同的数据库方言时有多好。我们的应用程序在MySQL,H2和SQLServer上运行,无需修改(也可能只在其他主要数据库上运行)。