拥有多个 DAO 可以吗?

Is it fine to have several DAOs?

假设我有一个包含两个 table 的数据库:companiesemployees。 我应该创建 companyDAOemployeeDAO 如果我 select,更新,添加和删除这两个 table 吗?

或者我应该创建一个 DAO,在其中为数据库中的每个 table 编写 CRUD 操作的方法?

为整个数据库创建一个 DAO 并不能很好地扩展。添加的数据库 table 越多,它就越大。在行业中,您几乎总是会看到 DAO 与 table 的一对一关系。一如既往,有例外和警告。

您应该为单个 Hibernate 模型创建一个 DAO(在大多数情况下)。 模型可以表示所有 table 列、部分 table 列或多个 table 列的组合。这完全取决于您的需求。

当你想这样做时(将单个 DAO 映射实体映射到多个 tables),当你想将休眠模型与业务模型分开时。

是的,为大多数实体设置单独的 DAO 是有意义的。

通常你会使用泛化的 DAOs,即你有一个抽象的超级 class。在一个简化的示例中,它可能如下所示:

class BaseDAO<T extends Entity>

提供了一系列有用的方法来查找、删除或更新实体。当为每个实体定义该 BaseDAO 的子 class 时,例如

class EmployeeDAO extends BaseDAO<Employee> 

您确保所有 DAO return 是您 必须在 BaseDAO 中实现的方法的正确类型。因此,EmployeeDAO 中的 findAll() 方法将 return List<Employee>

此外,您可以为某些实体实现自定义操作的方法,例如findEmployeesWithSalaryAbove(long) 在各自的 class 中。您不希望这些使单个 DAO 混乱。

顾名思义,DAO代表Data Access Object,是一个访问ONE对象或class的实体。为每个业务实体配备一个 DAO 是标准软件工程和企业行业(尤其是 Java)的最佳实践。

如果您在多个 DAO 之间重用相似的行为和数据,创建一个基础 DAO 并由其他 DAO 扩展它通常很方便。

另读https://en.wikipedia.org/wiki/Data_access_object