[英]Is there a good generic pattern for data store queries that hide vendor specific logic?
我正在尝试找到一种以Java实施通用搜索API的好方法,该方法将使我的用户无需知道后端技术是什么就可以搜索后端存储库,以便将来在我们切换供应商时可以重新实现底层逻辑,而无需重新编码API。 下面的存储库可以是关系数据库或文档存储,例如SOLR,CouchDB,MongoDB等。它需要支持所有典型的搜索要求,例如通配符,范围,按位运算符等。
是否有解决此问题的标准方法?
JPA是我最好的选择吗? 它会做我需要的一切,包括非关系数据库吗?
提前致谢!
您需要的是像Hibernate这样的ORM框架,如果您选择JPA,则需要重新发明很多东西。
使用Hibernate,您可以编写用于搜索后端数据库或存储库的业务逻辑,而无需特定于供应商的实现;如果以后需要更改后端,则可以在不影响现有业务代码实现的情况下进行操作。
我建议您检查休眠文档以获取更多参考
项目的Spring Data伞提供了一个很好的DAO抽象,名为CrudRepository
。 我相信大多数子项目( JPA , MongoDB等)都提供了一些实现。
JPA将是您用来将关系数据库映射到对象的众多实现之一。 它不能保护您免受数据库更改的影响。
我认为您正在寻找DAO模式 。 我在做什么如下:
这样,没有任何代码触及数据库特定的实现。 连接仅以XML形式形成。
JPA仅围绕RDBMS设计。 将其用于其他类型的数据存储几乎没有意义,因为类似其查询语言泄漏SQL语法之类的东西。 JDO专为数据存储不可知性而设计,并使用其实现(例如DataNucleus)为许多数据存储提供了持久性,尽管并非您提到的所有功能。
JPA围绕RDBMS设计,Hibernate也针对RDBMS设计。 JPA的实现很少支持no-sql。 围绕hibernate构建了类似的项目,以支持no-sql数据库。 但是,API本身已针对RDBMS进行了调整。
实施DAO模式将需要您编写自己的查询api。 以后,只要您的数据存储发生更改,就可以扩展实现。
JDO和DataNucleus是专为异构数据存储而设计的。 已经支持十几家商店,以及RDBMS。 美丽之处在于查询api在整个商店中保持不变。 JDO允许您使用域模型,并将存储详细信息留给DataNucleus等实现。
因此,我建议将JDO api与数据核一起使用。 以下链接提供了DataNucleus http://www.datanucleus.org/products/accessplatform_3_0/datastore_features.html中已经可用的列表数据存储和f功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.