gpt4 book ai didi

java - DAO 层内的 JDBC 连接

转载 作者:行者123 更新时间:2023-11-30 10:34:10 38 4
gpt4 key购买 nike

你好,
我尝试创建 DAO 层,主要遵循 this guide .
请注意,我不使用任何框架,只使用普通的 JDBC。

查看创建连接实例:
在每个 CRUD 方法中,我们通过以下方式获取连接:

Connection connection = daoFactory.getConnection();

所以我们每次调用方法都会获得一个新的连接。
我唯一的问题是如何在这里实现交易?
我看到两个解决方案:

  1. 我使用连接字段代替 DaoFactory 字段,我在方法中共享它。这样每个 DAO 就有一个连接。但是,事务应该由哪一层来负责呢?我应该在 Service - DAO 之间创建一些东西吗?
  2. 我为创建事务所需的其他 DAO 实例创建字段。因此,例如,我会让 TransactionDao 实现银行转账(从一个用户那里取钱并添加到另一个用户)并且这个 TransactionDao 也会有 UserDao,因为我应该进行一个创建和两个更新操作。

我想知道正确的解决方案,也许上面都没有。
也请告诉我是否有任何我应该担心的并发问题?
谢谢

最佳答案

最简单的解决方案是始终在单个 DAO 方法中执行事务,在方法开始时获取连接并将其传递给运行需要成为此事务一部分的 SQL 的其余方法。我不建议您使用自己的替代方法来替代这种简单的方法。 Spring 将允许您使用其幕后魔法来执行此操作,而且我敢肯定还有其他框架可以执行此操作,其中有数十种,但如果您想保持简单,请保持简单。如果其中一些方法也是独立的,我会做这样的事情:

public void incBalance(int accountId, int val) {
Connection conn = daoFactory.getConnection();
incBalance(conn, accountId, val);
}

private void incBalance(Connection conn, int accountId, int val) {
con.update(...);
}

public void transfer(...) {
Connection conn = daoFactory.getConnection();
conn.beginTransaction();
...
incBalance(conn, acc1, val);
incBalance(conn, acc2, -val);
...
conn.commit();
}

关于java - DAO 层内的 JDBC 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41813940/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com