DAO (Data Access Object) 資料存取物件,負責封裝與資料庫的所有互動。夾在業務邏輯層與資料庫資源中間,提供抽象介面隔離資料存取細節。
Connection conn = DAOFactory.createConnection(),將 Driver、URL、username、password 等封裝在 DAO 內部。未來切換資料庫(如 MSSQL 換 Oracle)只需修改 DAOFactory.getConnection() 實作,業務邏輯完全不受影響。insertUser(User user),具體 SQL 執行細節隱藏在實作類別中。呼叫端只需知道方法用途,無需知曉實作細節。通常 DAO 與 抽象工廠模式 搭配使用:Factory 負責建立資料庫連線與定位具體 DAO(如 UserDao、CustomerDao)。常將 getConnection() 設為 static,或將 Hibernate SessionFactory 等公共類別放入 Abstract Factory 中。
public class DAOFactory {
private static final SessionFactory sessionFactory;
// ThreadLocal 管理 Session
static Session currentSession() { ... }
public UserDao getUserDAO() {
return new UserDaoImpl(currentSession());
}
public OtherDao getOtherDAO() {
return new OtherDaoImpl(currentSession());
}
// ... 其他 DAO 獲取方法
}
public interface UserDao {
public void insertUser(FormBean formBean);
public void updateUser(FormBean formBean);
// 其他業務方法...
}
public class UserDaoImpl implements UserDao {
private Session session;
public UserDaoImpl(Session session) {
this.session = session;
}
public void insertUser(FormBean formBean) {
// 轉換 FormBean -> UserPO
// session.save(userPO);
// 轉換 UserPO -> FormBean 返回
}
public void updateUser(FormBean formBean) {
// session.update(userPO);
}
}
public class UserPO {
private String firstname;
private String lastname;
private String password;
// getter/setter...
}