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等)的解决方案。