在 Java 中将数据库独立查询发挥到极致……或一般情况下
Posted
技术标签:
【中文标题】在 Java 中将数据库独立查询发挥到极致……或一般情况下【英文标题】:Database-independent queries to the extreme in Java... or in general 【发布时间】:2010-11-24 01:38:17 【问题描述】:假设我有一个应用程序,理想情况下应该能够使用关系数据库、对象数据库、XML 文件或其他任何东西来保存其数据。本着对接口而不是实现进行编码的精神,我有一个通用的 DataStore 接口,它为涉及数据存储的所有 I/O 指定了一个协定。该接口可以通过RDBMSDataStore、OODBMSDataStore、XMLFileDataStore等具体类来实现。
只要我保持 DataStore 接口的内容简单 - 即getThis()
、getThose()
、saveThat()
、updateThis()
等,它就可以很好地工作。但只要我需要更复杂的查询,它就会中断向下。 XMLFileDataStore 类显然不理解 SQL,RDBMSDataStore 类显然不理解 XPath/XQuery。并且 OODBMSDataStore 根据所使用的 OODBMS 理解的东西完全不同。
我可以采用一种独立于语言的对象查询语言,用这种语言编写我的所有查询,然后让具体的类将它们翻译成它们的母语,但如果我想完整的话,这是一项艰巨的任务。
在 Java 中是否有处理这种情况的标准或最佳实践?不幸的是,似乎世界上 99% 的人将“数据库独立性”解释为“关系数据库独立性”,而完全忽略了对象数据库、XML 数据库、文档数据库等。
【问题讨论】:
【参考方案1】:从我阅读问题的方式来看,这听起来很像 Hibernate 为 Java 带来的语义。它甚至具有处理 XML 作为内容后备存储的模式(使用 Dom4J)。 Hibernate API 有许多扩展点,可以允许添加 OODBMS 模型。即使 Hibernate 被证明不是最适合您的解决方案(在实现方面),我认为它提供了一个很好的例子来说明可用于解决您提出的问题的模式类型。
【讨论】:
以上是关于在 Java 中将数据库独立查询发挥到极致……或一般情况下的主要内容,如果未能解决你的问题,请参考以下文章