何时使用Hibernate/JPA/Toplink?

7

现在我正在制作一个非常简单的网站-大约5个页面。问题是,是否值得花时间集成某种数据库映射解决方案,还是最好只使用老旧的JNDI。我可能需要从数据库中读取/写入约十几件事情。我想我对这些技术有基本的了解,但仍需要参考文档。有其他人面临过这个决定吗?

编辑:对不起,我应该明确指定使用JNDI查找DB连接和JDBC执行操作。

6个回答

18

简短的回答:取决于您想要支持的复杂程度。

长篇回答:

首先,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实现。例如,在“select”方法中,您可以更改代码以使用执行操作的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之上的东西,则应该继续使用该框架。

顺便说一下,自从Oracle收购了BEA以来,他们表示他们将在现在称为“Oracle Weblogic应用服务器”的Kodo(Weblogic持久性框架)中用Toplink替换它。

我给您留下了一些资源,您可以在其中获取更多信息:


在《企业应用架构模式》一书中,Martin Fowler解释了何时使用其中一个,这是目录。查看数据源体系结构模式与对象关系行为模式:

PEAA目录


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

DAO模式


这是Hibernate的入门教程:

Hibernate


Toplink的官方页面:

Toplink


最后,“我认为”JPA的好处是您可以稍后更改提供程序。

从简单开始,然后发展。

希望这有所帮助。


1

如果你没有计划对其进行扩展,那么它似乎对于非常简单的应用程序来说可能过度了。然而,似乎也值得在这个简单的应用程序中使用它们,这样下一次有东西可以使用它们时,你就能更好地理解它们的工作原理。


1

你是指普通的JDBC吗?如果你有时间,一个小项目可能是学习ORM框架的好机会。

不过,没有更多信息的话,很难提供具体的建议。


1

我的经验法则是,如果只是读取数据,我愿意使用JDBC,尽管我更喜欢使用一个空的Hibernate项目和SQLQuery来利用Hibernate的类型映射。一旦需要进行写操作,我就会选择Hibernate,因为设置几个属性然后调用save比逐个设置每个列要容易得多。当你不得不开始优化以避免对未更改的对象进行更新时,使用OR/M及其脏检查功能会更好。处理外键关系是另一个需要映射一次然后使用getter的迹象。相同的逻辑也适用于Toplink,尽管除非他们在我使用它的3年中添加了类似HQL的东西,否则Hibernate对于从纯SQL转换到ORM这种情况会更好。请记住,您不必映射每个对象/表,只需映射那些具有明显优势的对象/表即可。根据我的经验,大多数没有使用现有ORM的项目最终都会构建一个新的ORM,这是一个坏主意。


1

学习ORM的最佳方式是从一个小项目开始。从这个项目开始。

一旦你掌握了它,你会在所有项目中使用ORM。

没有什么比ORM更微不足道的了。在完成前几个项目后,你会发现自己无法用其他方式工作。ORM映射通常比任何其他工作方式更有意义。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接