2008-09-23 65 views
7

现在我正在制作一个非常简单的网站 - 大约5页。问题在于它是否过度杀伤,值得花时间整合某种数据库映射解决方案,或者如果使用普通的旧式JNDI会更好。我可能会需要从数据库读取/写入数十个东西。我想我对这些技术有一个基本的了解,但它仍然需要大量的参考文档。其他人以前面临过这个决定吗?何时使用Hibernate/JPA/Toplink?

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

回答

17

简答:这取决于你想要支持的复杂性。

龙答:

首先,ORM( - 当你把它叫做数据库映射 - 对象关系映射)和JNDI(Java命名和目录接口)是两个不同的东西。

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

也许你的意思是“JDBC”。

现在至于你的问题:如果是这样简单的话可能不需要实现一个ORM。我想,这个数字表格最多只有5到10个,而且操作非常简单。

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

如果您使用DAO模式,您可能稍后将其更改为在需要时支持ORM策略。

像这样: 假设你有一个Employee表

你用手工所有数据库的字段(它不应该太长),并用类似方法EmployeeDaO.java创建Employee.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; 
} 

这仅仅是一个例子,在现实生活中,你可以让abstact工厂创建ORM DAO,但是这是offtopic。关键是你可以开始简单,通过使用设计模式,如果需要,你可以稍后改变实现。

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

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

顺便说一句,由于甲骨文收购了BEA,他们表示他们正在用名为“Oracle Weblogic Application Server”的顶级链接取代Kodo(weblogic peresistence framework)。

我离开你一些资源,在那里你可以得到更多这方面的信息:


在这本书中,Martin Fowler的“企业应用架构模式”,说明在何处使用一个或另一个,这里是目录。看一看数据源建筑模式与对象关系行为模式:

PEAA Catalog


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

The DAO pattern


这是Hibernate的入门教程:

Hibernate


的Toplink的官方页面:

Toplink


最后我 “认为” 很好的思考JPA的是,你可能最近更改供应商。

开始简单然后进化。

我希望这会有所帮助。

1

看起来这对于一个非常简单的应用程序来说太过于夸张了,特别是如果你没有计划扩展它的话。但是,似乎也可以将这些简单的应用程序用到这些应用程序中,这样您就可以更好地了解它们在下次有什么东西可以使用时的工作方式。

1

你的意思是普通的JDBC吗? 一个小型项目可能是挑选其中一个ORM框架的好机会,尤其是如果你有时间的话。

没有更多的信息,很难提供一种方式或另一种建议。

1

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

1

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

一旦你掌握了它,你会使用ORM的一切。

ORM没有太小的东西。在你的第一对项目之后,你会发现你不能以其他方式工作。 ORM映射通常比其他任何工作方式更有意义。