在我的 Java 应用程序的 DAO 层中,我有两个 DAO 类EmployeeDAO
and BankDAO
。我需要控制/处理他们的数据库事务。我使用连接池来获取数据库连接。
EmployeeDAO 类:
public class EmployeeDAO {
String name;
String empCode;
int age;
// Getters & Setters
}
BankDAO 类:
public class BankDAO {
String bankName;
String acNo;
String empCode;
// Getters & Setters
}
假设我要将与该员工相关的员工和银行帐户详细信息存储在两个数据库表中。首先我保存员工,其次我保存银行详细信息,如果发生错误存储银行详细信息时我需要rollback完成交易。
如何在使用 DAO 时管理此类交易?
如果您使用普通 JDBC,您可以做的就是共享同一个实例Connection
在 DAO 类的两个实例中。
public class EmployeeDAO {
private Connection conn;
public void setConnection(Connection conn) {
this.conn = conn;
}
...
}
public class BankDAO {
private Connection conn;
public void setConnection(Connection conn) {
this.conn = conn;
}
...
}
在客户端代码中,首先需要创建一个Connection
对象实例。接下来,您需要开始交易,使用conn.setAutoCommit(false);
。通过Connection
两个 DAO 类的对象实例。如果任何操作都没有出现错误,conn.commit();
, 否则,conn.rollback();
e.g.:
Connection conn = null;
try {
// getConnection from pool
conn.setAutoCommit(false);
EmployeeDAO employeeDAO = new EmployeeDAO();
employeeDAO.setConnection(conn);
BankDAO bankDAO = new BankDAO();
bankDAO.setConnection(conn);
// save employee
// save bank details
conn.commit();
catch(Exception e) {
if (conn != null) {
conn.rollback();
}
} finally {
if (conn != null) {
conn.close();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)