2

morphia 单个BasicDAO 可以处理/查询多个集合,可以通过类参数通过重载函数。

public class GenericDAO extends BasicDAO<T, K> {

  /* override count impl*/
  public long count(Class<T> clazz) {
     return ds.getCount(clazz);
  }
}

有没有其他方法可以使用单个 DOA 查询两个不同的集合,或者最好为每个集合创建单独的 DAO。

用户和 BlogEntry 集合的示例

public class BlogEntryDAO extends BasicDAO<BlogEntry, ObjectId>
public class UserDAO extends BasicDAO<User, ObjectId>
4

2 回答 2

1

我认为 Morphia 中的 DAO 的目的是为每个类/集合提供单独的数据访问对象。

我会创建两个单独的类,每个类都扩展 BasicDao。

我相信您可以按照您的建议通过重载所需的方法来实现它,但我们的想法是拥有一个对象,您可以通过该对象获取给定模型的数据。

于 2012-06-05T17:42:06.457 回答
1

简单回答是不,

BasicDAO 是在处理单个集合/实体的假设下进行的,因为 DOA 的许多功能都是基于实体/类和 _id/主键类型的。

public class BasicDOA<T,K> implements DOA<T,K>

T 应该是一个特定的类
K 应该是一个特定的键(可以为不同的类分开)例如 ObjectId、String、Long 等

示例函数

public Class<T> getEntityClass()
public T get(K id)

如果您想在单个 DAO 中处理多个集合,则使用自定义方法创建您自己的通用 DAO,并使用 DataStore 来处理不同/特定的集合。

public class MyDAO {
  protected DatastoreImpl ds;

  public count(Class<T> clazz) {
    return ds.getCount(clazz);
  }

  public T get(Class<T> clazz, K id) {
     return ds.get(clazz, id);
  }
}
于 2012-06-07T12:56:34.723 回答