有几个DAO可以吗?

时间:2018-05-25 15:37:04

标签: java mysql dao

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

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

如果要执行此操作(将单个DAO映射实体添加到多个表),则需要将hibernate模型与业务模型分开。

答案 3 :(得分:0)

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

通常情况下,你会使用普通的DAO,即你有一个抽象的超类。在一个简化的例子中,它可能如下所示:

class BaseDAO<T extends Entity>

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

class EmployeeDAO extends BaseDAO<Employee> 

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

此外,您可以为某些实体实施自定义操作的方法,例如:各个班级findEmployeesWithSalaryAbove(long)。你不希望这些混乱单个DAO。