假设我有一个数据库和两个表: companies 以及 employees . 我应该创建吗 companyDAO 以及 employeeDAO 如果我从这两个表中选择、更新、添加和删除?或者我应该创建一个dao,在其中为数据库中的每个表编写crud操作的方法?
companies
employees
companyDAO
employeeDAO
epfja78i1#
是的,分开是有道理的 DAO 对大多数实体来说都是这样。通常情况下,您将使用generified DAO s、 也就是说,你有一个抽象的超类。在一个简化的示例中,它可以如下所示:
DAO
class BaseDAO<T extends Entity>
提供了一系列有用的方法来查找、删除或更新实体。为每个实体定义basedao的子类时,例如。
class EmployeeDAO extends BaseDAO<Employee>
确保所有dao都为方法返回正确的类型,这些方法只需在basedao中实现即可。所以 findAll() 方法返回 List<Employee> .此外,您还可以为某些实体实现定制操作的方法,例如。 findEmployeesWithSalaryAbove(long) 在各自的班级里。你可不想把一把刀弄得乱七八糟。
findAll()
List<Employee>
findEmployeesWithSalaryAbove(long)
cedebl8k2#
顾名思义,dao代表数据访问对象,是访问一个对象或类的实体。为每个业务实体拥有一个dao是标准的软件工程和企业行业(尤其是java)最佳实践。如果在多个dao之间重用类似的行为和数据,那么创建一个基本dao并通过其他dao扩展它通常是很方便的。同时阅读https://en.wikipedia.org/wiki/data_access_object
ddhy6vgd3#
您应该为单个hibernate模型创建一个dao(在大多数情况下)。模型可以是所有表列的表示、表列的一部分或多个表列的组合。这完全取决于你的需要。当您想这样做(将单个dao实体Map到多个表)时,当您想将hibernate模型从业务模型中分离出来时。
41ik7eoe4#
为整个数据库创建一个dao不能很好地扩展。添加的数据库表越多,它就越大。在行业中,您几乎总是会看到一对一dao到表的关系。总是有例外和警告。
4条答案
按热度按时间epfja78i1#
是的,分开是有道理的
DAO
对大多数实体来说都是这样。通常情况下,您将使用generified
DAO
s、 也就是说,你有一个抽象的超类。在一个简化的示例中,它可以如下所示:提供了一系列有用的方法来查找、删除或更新实体。为每个实体定义basedao的子类时,例如。
确保所有dao都为方法返回正确的类型,这些方法只需在basedao中实现即可。所以
findAll()
方法返回List<Employee>
.此外,您还可以为某些实体实现定制操作的方法,例如。
findEmployeesWithSalaryAbove(long)
在各自的班级里。你可不想把一把刀弄得乱七八糟。cedebl8k2#
顾名思义,dao代表数据访问对象,是访问一个对象或类的实体。为每个业务实体拥有一个dao是标准的软件工程和企业行业(尤其是java)最佳实践。
如果在多个dao之间重用类似的行为和数据,那么创建一个基本dao并通过其他dao扩展它通常是很方便的。
同时阅读https://en.wikipedia.org/wiki/data_access_object
ddhy6vgd3#
您应该为单个hibernate模型创建一个dao(在大多数情况下)。模型可以是所有表列的表示、表列的一部分或多个表列的组合。这完全取决于你的需要。
当您想这样做(将单个dao实体Map到多个表)时,当您想将hibernate模型从业务模型中分离出来时。
41ik7eoe4#
为整个数据库创建一个dao不能很好地扩展。添加的数据库表越多,它就越大。在行业中,您几乎总是会看到一对一dao到表的关系。总是有例外和警告。