美好的一天,
我尝试创建DAO层,主要是this guide
请注意,我不使用任何框架,只需简单的JDBC。
看一下创建一个Connection实例:
在每个CRUD方法中,我们通过以下方式获得连接:
Connection connection = daoFactory.getConnection();
因此,每当我们调用方法时,我们都会获得一个新连接
我唯一的问题是如何在这里实现交易?
我看到两个解决方案:
我想知道正确的解决方案,也许它不是上面提到的 请告诉我,是否还有我应该担心的并发问题? 谢谢
答案 0 :(得分:1)
最简单的解决方案是始终在单个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();
}