JDBC DAO 层内的连接

JDBC Connection inside DAO layer

美好的一天,
我尝试创建 DAO 层,主要遵循 this guide.
请注意,我不使用任何框架,只是简单的 JDBC.

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

Connection connection = daoFactory.getConnection();

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

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

我想知道正确的解决方案,也许是上面提到的none。
请告诉我还有我应该担心的并发问题吗?
谢谢

最简单的解决方案是始终在单个 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();
}