Java 有几个DAO可以吗?

Java 有几个DAO可以吗?,java,mysql,dao,Java,Mysql,Dao,假设我有一个数据库和两个表:公司和员工。 如果我从这两个表中选择、更新、添加和删除,是否应该创建companyDAO和employeeDAO 或者我应该创建一个DAO,在其中为数据库中的每个表编写CRUD操作的方法?为整个数据库创建一个DAO不能很好地扩展。添加的数据库表越多,它就越大。在工业中,您几乎总是会看到一对一DAO到表的关系。像往常一样,也有例外和警告 您应该为单个Hibernate模型创建一个DAO(在大多数情况下)。 模型可以是所有表列的表示、表列的一部分或多个表列的组合。这完全取

假设我有一个数据库和两个表:
公司
员工
。 如果我从这两个表中选择、更新、添加和删除,是否应该创建
companyDAO
employeeDAO


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

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

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


当您想这样做时(将单个DAO映射实体映射到多个表),当您想将hibernate模型从业务模型中分离出来时。

是的,对于大多数实体来说,使用单独的
DAO
s是有意义的

通常情况下,您将使用泛化的
DAO
s,即您有一个抽象的超类。在一个简化的示例中,它可能如下所示:

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

class EmployeeDAO extends BaseDAO<Employee> 
class EmployeeDAO扩展了BaseDAO
确保所有DAO都为只需在BaseDAO中实现的方法返回正确的类型。因此,EmployeeDAO中的
findAll()
方法将返回
List


此外,您还可以为某些实体实现自定义操作的方法,例如在相应类中的
findeEmployeeswithSalaryOver(long)
。你不想让它们把一把刀弄乱

顾名思义,代表数据访问对象的DAO是访问一个对象或类的实体。每个业务实体有一个DAO是标准的软件工程和企业行业(特别是Java)最佳实践

如果您在多个DAO之间重用类似的行为和数据,那么创建一个基本DAO并通过其他DAO扩展它通常是很方便的


另请阅读

同意。但我更愿意说,每个实体或每个类都有一个DAO,而不是每个表,因为在多对多关系中,关系表通常没有DAO。此外,它更适合于面向对象的方法。因此,一般来说,我有一个抽象的超类BaseDAO,每个实体都有通用的方法,其他子类DAO将用自己的特定方法扩展BaseDAO?是的,没错!互联网上有各种各样的文章可能对通用方法有所帮助,例如,许多框架已经提供了带有准备好的抽象DAO(如Spring等)的解决方案。