一尘不染

何时使用Hibernate / JPA / Toplink?

hibernate

现在,我正在制作一个非常简单的网站-
大约5页。问题是,整合某种类型的数据库映射解决方案是否过时且值得花时间,或者仅使用简单的旧JNDI会更好。我可能需要从数据库中读取/写入很多东西。我想我对这些技术有基本的了解,但是仍然需要大量参考文档。还有其他人面对过这个决定吗?

编辑:抱歉,我应该指定JNDI来查找数据库连接和JDBC以执行操作。


阅读 278

收藏
2020-06-20

共1个答案

一尘不染

简短的答案:这取决于您要支持的复杂性。

长答案:

首先,ORM(对象关系映射-称为数据库映射-)和JNDI(Java命名和目录接口)是两种不同的事物。

如您所知,第一个用于将数据库表映射到类和对象。第二个是为资源提供查找机制,它们可以是DataSources,Ejb,Queues或其他资源。

也许您的意思是“ JDBC”。

现在,就您的问题而言:如果可能就这么简单,则无需实施ORM。我猜数字表最多大约为5-10,而且操作非常简单。

大概使用纯JDBC就足够了。

如果使用DAO模式,则可以在以后更改它以支持ORM策略(如果需要)。

像这样:假设您有Employee表

您可以使用数据库的所有字段手动创建Employee.java(不应花费太长时间),并使用以下方法创建EmployeeDaO.java:

+findById( id ): Employee
+insert( Employee ) 
+update( Employee )
+delete( Employee ) 
+findAll():List<Employee>

实现非常简单:

select * from employee where id = ?
insert into employee ( bla, bla, bla ) values ( ? , ? , ? )
update etc. etc

当(和如果)您的应用程序变得过于复杂时,您可以更改DAO实现。例如,在“选择”方法中,您可以更改代码以使用执行该操作的ORM对象。

public Employee selectById( int id ) {
      // Commenting out the previous implementation...
      // String query = select * from employee where id = ? 
      // execute( query )

      // Using the ORM solution

       Session session = getSession();
       Employee e = ( Employee ) session.get( Employee.clas, id );
       return e;
}

这只是一个例子,在现实生活中,您可以让表象工厂创建ORM DAO,但这是题外话。关键是您可以从简单开始,通过使用设计模式,可以在以后根据需要更改实现。

当然,如果您想学习技术,甚至可以只用一张桌子就可以开始使用。

一个或另一个(即ORM解决方案)的选择基本上取决于您所使用的技术。例如,对于JBoss或其他开源产品,Hibernate很棒。它是开源的,有很多资源可供学习。但是,如果您使用的是已经具有Toplink的产品(例如oracle应用服务器),或者如果基础已经在Toplink上构建,则应该使用该框架。

顺便说一句,自从甲骨文收购BEA以来,他们说他们正在用现在称为“ Oracle Weblogic Application
Server”的toplink替换Kodo(weblogic持久性框架)。

我为您提供了一些资源,您可以在其中获取有关此信息的更多信息:


在这本《企业应用程序体系结构模式》一书中,马丁·福勒(Martin
Fowler)解释了在哪里使用一个或另一个,这里是目录。看一下数据源架构模式与对象关系行为模式:

PEAA目录


DAO(数据访问对象)是核心J2EE模式目录的一部分:

DAO模式


这是Hibernate的入门教程:

hibernate


Toplink的官方页面:

oracle


最后,我“认为” JPA的好主意是您最近可能会更改提供者。

从简单开始,然后发展。

我希望这有帮助。

2020-06-20