假设我有一个包含两个表的数据库:companies
和employees
。
我应该创建companyDAO
和employeeDAO
如果我从这两个表中选择,更新,添加和删除?
或者我应该创建一个DAO,在其中我将为数据库中的每个表编写CRUD操作的方法?
答案 0 :(得分:2)
为整个数据库创建一个DAO并不能很好地扩展。您添加的数据库表越多,它就越大。在工业界,你几乎总能看到一对一的DAO与桌子的关系。一如既往,有例外和警告。
答案 1 :(得分:1)
顾名思义,代表数据访问对象的DAO是访问ONE对象或类的实体。它是标准的软件工程和企业行业(尤其是Java)最佳实践,为每个业务实体提供一个DAO。
如果您在多个DAO之间重复使用类似的行为和数据,那么创建基本DAO并通过其他DAO扩展它通常很方便。
答案 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。