Java DAO层内的JDBC连接
你好,Java DAO层内的JDBC连接,java,jdbc,concurrency,dao,Java,Jdbc,Concurrency,Dao,你好, 我尝试创建DAO层,主要如下所示。 请注意,我不使用任何框架,只使用普通的JDBC 看看如何创建连接实例: 在每个CRUD方法中,我们通过以下方式获得连接: Connection connection = daoFactory.getConnection(); 因此,每次调用方法时,我们都会获得一个新的连接。 我唯一的问题是如何在这里实现事务 我看到两种解决办法: 我使用Connection字段,而不是DaoFactory字段,我在方法之间共享它。以便每个DAO有一个连接。但是,哪一层
我尝试创建DAO层,主要如下所示。
请注意,我不使用任何框架,只使用普通的JDBC 看看如何创建连接实例:
在每个CRUD方法中,我们通过以下方式获得连接:
Connection connection = daoFactory.getConnection();
因此,每次调用方法时,我们都会获得一个新的连接。我唯一的问题是如何在这里实现事务
我看到两种解决办法:
请告诉我是否有任何我应该担心的并发问题?
谢谢最简单的解决方案是始终在单个DAO方法中执行事务,在方法开始时获取连接,并将其传递给运行SQL的其余方法,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();
}
当我看到人们投票结束一个完全合理的问题,尤其是一个新用户提出的问题时,我觉得地狱没有仇恨。我建议你阅读这篇文章,这可能会帮助你回答自己的问题。谢谢,我只是想用类似的代码编辑我的帖子,问我是否理解你的意思。最后一个问题。我可以将incBalance封装到AccountDao中,并将此字段包含在TransactionDao中吗?这不是一个坏习惯吗?因此,正如我的代码类似于
accountDao.update(连接,transaction.getReceiver())
和accountDao.update(连接,transaction.getSender())
。哪一部分是不好的做法?您正在Dao之间传递连接吗?我肯定是的,但我通常不会听别人说正确的、简单的代码是不好的做法。