拥有多个 DAO 可以吗?

THE*_*all 6 java mysql dao

假设我有一个包含两个表的数据库:companies和employees。我应该创建companyDAO和employeeDAO如果我从这两个表中选择、更新、添加和删除吗?

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

Rob*_*ett 6

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

  • 同意。但我更愿意说每个_entity_ 或每个_class_ 有一个DAO,而不是每个_table_,因为通常没有用于多对多关系中的关系表的DAO。而且,它更适合面向对象的方法。 (3认同)

Mat*_*att 1

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

很多时候你会使用泛型DAO,即你有一个抽象的超类。在一个简化的示例中,它可能如下所示:

class BaseDAO<T extends Entity>
Run Code Online (Sandbox Code Playgroud)

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

class EmployeeDAO extends BaseDAO<Employee> 
Run Code Online (Sandbox Code Playgroud)

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

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