【问题标题】:What exactly are spring data repositories used for?spring 数据存储库到底是做什么用的?
【发布时间】:2014-07-24 11:26:57
【问题描述】:

最近在浏览 spring 的 mongotemplate 时,他们触及了存储库 (here)。例如,一个 CRUD 存储库,它是为您的所有 CRUD 操作创建的存储库吗? 谁能用更简单的术语解释一下,存储库的目的到底是什么?

【问题讨论】:

标签: spring spring-data


【解决方案1】:

持久化数据都是关于 CRUD(创建/读取/更新/删除)的,但您可以使用不同的技术来实现这些操作。

您提供的链接恰好选择了 MongoDB,一个填充 NoSQL 文档数据库。 Spring Data 还可以与关系型 SQL 数据库、对象数据库、图形数据库等一起使用。

界面设计的美妙之处以及 Spring 的真正强大之处在于,您可以将需要完成的内容与完成方式的细节区分开来。 Spring 依赖注入可以很容易地在不同的实现中进行交换,因此您不必过于拘泥于您的选择。

这是一个带有 CRUD 操作的简单通用 DAO 接口:

package persistence;

public interface GenericDao<K, V> {
    List<V> find();
    V find(K id);
    K save(V value);
    void update(V value);
    void delete(V value);
}

你可以有一个 HibernateGenericDao:

package persistence;

public class HibernateGenericDao implements GenericDao<K, V> {
    // implement methods using Hibernate here.
}

【讨论】:

  • 所以,如果我维护一个 CRUD 存储库并连接到我的所有 Dao 并使用通用方法,如保存、删除、更新、saveOrUpdate 等。如果以后我决定选择而不是 RDBMS 解决方案NoSql 解决方案只是配置问题。你还看到更多这样的例子吗?除了 CRUD,为什么我需要创建一些自定义存储库?
  • 对不起,我很困惑。 DAO 是 CRUD 存储库。听起来您已经有多个 DAO 与类 1:1 映射。您可以选择编写一个适用于所有持久类的通用存储库,但您不需要两者都需要。
  • Hibernate 是众多使用 CRUD 操作实现 DAO 的选择之一。您可以直接选择 JDBC、MongoDB 或其他任何东西来代替 Hibernate,但无论如何它们实现的接口都是相同的。
  • 好的,所以它或多或少像一个genericDao,它具有所有基本的实用方法(保存、更新、删除等)。我想如果任何使用休眠的人肯定会在他们的代码中使用这个通用的 dao。对不起,我对此一无所知,它真的是一回事吗,那么这个标记接口的需要是它或多或少像一个必须合并到他们的代码中的好模式,而spring刚刚正式化了我们使用的方式早点解决这个问题?
  • 错了。选择使用 Hibernate 并不强制您使用通用接口。它不是像 Remotable 或 Serializable 这样的标记接口。您可以编写 Hibernate DAO 或任何其他完全没有接口的类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 2015-08-06
  • 2013-09-02
相关资源
最近更新 更多