java—有几个DAO可以吗?

fsi0uk1n  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(338)

假设我有一个数据库和两个表: companies 以及 employees . 我应该创建吗 companyDAO 以及 employeeDAO 如果我从这两个表中选择、更新、添加和删除?
或者我应该创建一个dao,在其中为数据库中的每个表编写crud操作的方法?

epfja78i

epfja78i1#

是的,分开是有道理的 DAO 对大多数实体来说都是这样。
通常情况下,您将使用generified DAO s、 也就是说,你有一个抽象的超类。在一个简化的示例中,它可以如下所示:

class BaseDAO<T extends Entity>

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

class EmployeeDAO extends BaseDAO<Employee>

确保所有dao都为方法返回正确的类型,这些方法只需在basedao中实现即可。所以 findAll() 方法返回 List<Employee> .
此外,您还可以为某些实体实现定制操作的方法,例如。 findEmployeesWithSalaryAbove(long) 在各自的班级里。你可不想把一把刀弄得乱七八糟。

cedebl8k

cedebl8k2#

顾名思义,dao代表数据访问对象,是访问一个对象或类的实体。为每个业务实体拥有一个dao是标准的软件工程和企业行业(尤其是java)最佳实践。
如果在多个dao之间重用类似的行为和数据,那么创建一个基本dao并通过其他dao扩展它通常是很方便的。
同时阅读https://en.wikipedia.org/wiki/data_access_object

ddhy6vgd

ddhy6vgd3#

您应该为单个hibernate模型创建一个dao(在大多数情况下)。模型可以是所有表列的表示、表列的一部分或多个表列的组合。这完全取决于你的需要。
当您想这样做(将单个dao实体Map到多个表)时,当您想将hibernate模型从业务模型中分离出来时。

41ik7eoe

41ik7eoe4#

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

相关问题