如何使用单一连接管理DAO

时间:2015-02-23 02:04:01

标签: java dao

我从这里读过关于DAO的文章,我发现它真的很有趣,但有些东西仍然让我失望。 我想使用Interface实现两个不同的数据源 - 一个是Socket连接,另一个是数据库连接。

为此我做了以下事情:

public class databasePartDAOImplementation extends Database implements PartDAO {
    //implementation
}

和Database类有一个构造函数和一些管理此连接的方法。我如何设置这些类,因此我可以实例化一个数据库连接,然后使用这一个连接使用多个DAO?

我正在考虑创建和实例化Database()并在需要时将其投射到所有DAO中,但我不确定是否有任何挫折。

我使用的数据库类看起来像这样

public class Database
{
    protected Connection connection;
    public Database() throws ClassNotFoundException
    {
        Class.forName("org.sqlite.JDBC");
        connection = null;
        try
        {
            connection = DriverManager.getConnection("jdbc:sqlite:database.s3db");
        }
        catch(SQLException e)
        {
            System.err.println(e.getMessage());
        }
    }
    public Connection getConnection() {
        return connection;
    }
}

tl; dr使用这个是访问数据库的好主意吗?

Database db = new Database();
databasePartDAOImplementation dao = (databasePartDAOImplementation) db;
dao.getAllRecords();

1 个答案:

答案 0 :(得分:1)

关于DAO应该管理与其数据源的连接以获取和存储数据这一点,您是部分正确的。但是,正如您所问,我们如何让所有DAO共享相同的连接?让我通过考虑以下策略来阐明一些问题,然后事情将会落实到位:

  • 自动生成DAO代码:通常,业务对象,DAO及其基础数据库表之间存在关系。可以使用该关系自动生成代码。在复杂的情况下,您可以使用第三方工具进行代码生成。可能不是你想要的,但我只是想把它放在那里。

  • DAO工厂:

    • 在您不处理不同数据源的情况下(显然这不是您的方案),您将创建一个DAO工厂类并使用 Factory Method 模式创建不同的DAO您的应用程序使用。在这种情况下,DAO工厂将是管理数据源连接的类。
    • 在您处理不同数据源的场景中(这很可能是您的场景),您将创建一个抽象的DAO工厂(这是抽象工厂模式)。然后,再次使用 Factory Method 模式,您的抽象DAO工厂为每个特定数据源创建具体的DAO工厂。每个具体的DAO工厂将负责两项主要任务:

      1. 为每种数据访问创建DAO
      2. 实现一个静态方法(例如createConnection),负责创建与其特定数据源的连接。您应该考虑连接池的实现和使用情况。
      3. 由具体DAO工厂创建的所有DAO都可以调用该静态方法(createConnection)以获取与特定数据源的连接。这个连接在具体的DAO工厂的所有DAO中基本上是相同的连接。

本回答中提出的想法基于详细文章Core J2EE Patterns - Data Access Object