现在我正在制作一个非常简单的网站——大约 5 页。问题是集成某种数据库映射解决方案是否过于矫枉过正并且值得花时间,或者是否最好只使用普通的旧 JNDI。我可能需要从数据库中读取/写入十几个东西。我想我对这些技术有基本的了解,但仍然需要大量参考文档。其他人之前面临过这个决定吗?
编辑:对不起,我应该指定 JNDI 来查找数据库连接和 JDBC 来执行操作。
简短回答:这取决于您要支持的复杂性。
长答案:
首先,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,他们说他们正在用现在称为“甲骨文 Weblogic 应用服务器”的 toplink 替换 Kodo(weblogic 持久性框架)。
我给你留下了一些资源,你可以在其中获得更多信息:
这是 Hibernate 的入门教程:
Toplink官方页面:
最后,我“认为”JPA 的好处是您最近可能会更换提供者。
从简单开始,然后发展。
我希望这有帮助。
对于一个非常简单的应用程序来说,这似乎有点过头了,特别是如果你没有计划扩展它的话。但是,将它们与这个简单的应用程序一起使用似乎也是值得的,这样您就可以更好地了解它们是如何工作的,以便下次您有可以使用它们的东西时。
你的意思是普通的旧 JDBC 吗?一个小项目可能是学习其中一个 ORM 框架的好机会,特别是如果你有时间的话。
然而,如果没有更多信息,很难以一种或另一种方式提供推荐。
我的经验法则是,如果它是只读的,我愿意在 JDBC 中进行,尽管我更喜欢使用带有 SQLQuery 的空 Hibernate 项目来利用 Hibernate 的类型映射。一旦我必须进行写入,我就会使用 Hibernate,因为设置一些属性然后调用 save 比单独设置每一列要容易得多。当您必须开始优化以避免更新未更改的对象时,最好使用 OR/M 及其脏检查。处理外键关系是您需要映射一次然后使用 getter 的另一个标志。相同的逻辑也适用于 Toplink,尽管除非他们在我使用它的 3 年内添加了类似 HQL 的东西,否则 Hibernate 对于这种从纯 SQL 的过渡会好得多。请记住,你不 不必映射每个对象/表,只需映射具有明显优势的对象/表。根据我的经验,大多数不使用现有 OR/M 的项目最终都会构建一个新的,这是一个坏主意。
学习 ORM的最好方法是在一个小项目上。开始这个项目。
一旦你掌握了它的窍门,你就会对一切使用 ORM。
对于 ORM 来说,没有什么太小了。在你的前几个项目之后,你会发现你不能以任何其他方式工作。ORM 映射通常比几乎任何其他工作方式更有意义。
在这里查看各种 toplink 指南,它们有介绍、示例、场景等