何时使用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<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,但这是offtopic。重点是您可以从简单开始,并且通过使用设计模式,您可以在以后根据需要更改实施。
当然,如果你想学习这项技术,你甚至可以用一张桌子来开始。
选择一种或另一种(ORM解决方案)主要取决于您使用的技术。例如,对于JBoss或其他开源产品,Hibernate非常棒。它是开源的,有很多资源可供学习。但是如果你正在使用已经有Toplink的东西(比如oracle应用服务器),或者如果基础已经建立在Toplink上,你应该继续使用该框架。
顺便说一句,自甲骨文收购BEA以来,他们表示他们正在用现在所谓的“Oracle Weblogic Application Server”中的toplink取代Kodo(weblogic peresistence framework)。
我留给您一些资源,您可以从中获得更多相关信息:
在这种“企业应用程序架构模式”中。书,Martin Fowler,解释了在哪里使用,这是目录。看看数据源架构模式与对象关系行为模式:
DAO(数据访问对象)是核心J2EE模式目录的一部分:
这是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