每个数据库连接一个DAO?

时间:2013-03-07 19:56:54

标签: java spring jdbc

使用Spring和JDBCTemplates(没有ORM),我有一个针对CMS数据库的DAO。

我现在需要访问另一个数据库。我应该创建一个单独的DAO还是使用一个大DAO?似乎在我的情况下工作。我有一个接口,但它不是通用接口。除了INSERT到审计表之外,我所做的只是检索值。因此,根据link

,我觉得我不需要为每个表提供单独的CRUD服务

我认为这不重要,但一个数据库是MySQL,另一个是Oracle。

3 个答案:

答案 0 :(得分:4)

您可以通过Google搜索来了解DAO模式,但一般情况下,您可以为每个表创建一个DAO'或一组相关表格。我不知道这是不是你的意思是数据库'。有些人使用这种方式。 (您更新了问题以解释'数据库'。因此,每个数据库通常有多个DAO,每个表或一组相关表有一个。)

所以"是"

注意:当我说“相关表格”时我可能需要解释一下。例如,如果您有发票表和invoice_detail表。详细信息行通常类似于纸质发票上的一行,并且外键返回到发票表中的发票ID或发票编号。有两个表,但您可能只有一个DAO来处理发票和与之相关的详细信息。可能有一些方法可以按发票编号和客户及其中一组按日期获取发票,也可以在一个月内获得所有发票,其中一个特定项目位于其中一条详细行。可以使用方法创建发票并在其上创建所有行。等等。一个DAO但多个表。

详细信息行可能有外键指向'部分'表有部件的详细信息。您可能需要阅读零件信息并将其与发票一起退回,并且您可能希望在阅读发票后单独阅读零件。在后一种情况下,会有第二个DAO,它具有读取和可能修改零件记录的方法。

此示例假设这些数据库都在同一个数据库中,无论是MySQL还是Oracle。

答案 1 :(得分:1)

您应该在您的DAO中注入一个DataSource,然后您用来创建SimpleJdbcTemplate。由于DataSource连接到特定数据库,因此您需要为每个数据库单独使用DAO / DataSource s / SimpleJdbcTemplate

答案 2 :(得分:0)

您的Spring应用程序中每个表或数据实体可以有多个“DAO”,但是您仍然应该隔离数据库调用,而Spring需要知道不同的连接参数,并且可以使用applicationContext中的DAO定义来分隔。这听起来像是REST Web服务的候选者,可以处理来自其他数据库的检索。