何时使用Hibernate / JPA / Toplink?

现在我正在制作一个非常简单的网站 – 大约5页。 问题是,如果它是过度的,并且值得花时间来集成某种数据库映射解决方案,或者如果最好只使用普通的旧JNDI。 我可能需要从数据库中读取/写入十几件东西。 我想我对这些技术有基本的了解,但仍需要大量参考文档。 其他人以前面临过这个决定吗?

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

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

答案很长:

首先,ORM(对象关系映射 – 你称之为数据库映射 – )和JNDI(Java命名和目录接口)是两回事。

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

也许你的意思是“JDBC”。

至于你的问题:如果这很简单可能就没有必要实现ORM。 数字表最多约为5 – 10,我猜这些操作非常简单。

可能使用普通的JDBC就足够了。

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

像这样:假设您有Employee表

您可以手动创建带有DB的所有字段的Employee.java(它不应该花太长时间),使用以下方法创建EmployeeDaO.java:

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

而且实施非常简单:

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

当(和If)应用程序变得过于复杂时,您可能会更改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,但这是offtopic。 重点是您可以从简单开始,并且通过使用设计模式,您可以在以后根据需要更改实现。

当然,如果你想学习这项技术,你甚至可以用一张桌子来开始学习。

选择一种或另一种(ORM解决方案)主要取决于您使用的技术。 例如,对于JBoss或其他开源产品,Hibernate非常棒。 它是开源的,有很多资源可供学习。 但是如果你正在使用已经有Toplink的东西(比如oracle应用程序服务器),或者如果基础已经构建在Toplink上,你应该继续使用该框架。

顺便说一句,自甲骨文收购BEA以来,他们表示他们正在用现在所谓的“Oracle Weblogic Application Server”中的toplink取代Kodo(weblogic peresistence framework)。

我给你留下了一些资源,你可以从中获得更多信息:


在这本“企业应用程序架构模式”一书中,Martin Fowler解释了在哪里使用,这是目录。 看看数据源架构模式与对象关系行为模式:

PEAA目录


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

DAO模式


这是Hibernate的入门教程:

过冬


Toplink的官方页面:

排名靠前


最后,我“认为”JPA的好想法是你最近可能会改变提供者。

从简单开始,然后进化。

我希望这有帮助。

对于一个非常简单的应用程序来说,它似乎有点过分,特别是如果你没有计划对其进行扩展。 但是,使用这个简单的应用程序似乎也值得使用,这样您就可以更好地了解它们在下次有可能使用它们时的工作方式。

你的意思是普通的旧JDBC吗? 一个小项目可能是一个很好的机会来获取其中一个ORM框架,特别是如果你有时间的话。

如果没有更多信息,很难以这种或那种方式提供推荐。

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

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

一旦你掌握了它,你将使用ORM来做所有事情。

对于ORM来说,没有什么比这更小的了。 在你的第一个项目之后,你会发现你不能以任何其他方式工作。 ORM映射通常比几乎任何其他工作方式更有意义。

看看这里的各种toplink指南,它们有介绍,示例,场景等

http://docs.oracle.com/cd/E14571_01/web.1111/b32441/toc.htm