DAO (Data Access Object) è fondamentalmente un modello per la programmazione, per utilizzare questo, è necessario creare una classe che creerà un oggetto che fornisce un'interfaccia astratta a un tipo di unità di persistenza (db, file system. Xml, ecc.) Perché è utile? Perché fornisce alcune operazioni di dati specifici senza esporre i dettagli del database.
Un esempio fondamentale di DAO:
import java.util.List;
public abstract class DAOFactory {
public static final int MYSQL_JDBC = 1;
public static final int MYSQL_JPA = 2;
public static final int MYSQL_HIBERNATE = 3;
public abstract List<UserDTO> listAllUsers();
public static DAOFactory getDAOFactory(int whichFactory) {
switch (whichFactory) {
case MYSQL_JDBC : return new MySqlJDBCDaoFactory();
case MYSQL_JPA: return new MySqlJpaDaoFactory();
case MYSQL_HIBERNATE: return new MySqlHibernateDaoFactory();
default: return null;
}
}
}
Poi si deve creare una fabbrica specifici per ogni tipo di persistenza si riuscirà nella propria applicazione, e che fabbrica specifici devono implementare i metodi che si utilizzano per la persistenza, per esempio listAllUsers();
Ad esempio, per MySQL JPA:
public class MySqlJpaDaoFactory extends DAOFactory {
@Override
public List<UserDTO> listAllUsers() {
// Here I implement specific functionality to retrieve data using JPA Framework
//EntityManagerFactory emf = ...
//EntityManager em = ...
//List<UserDTO> list = em.get...();
//return list;
return null;
}
}
Per MySQL JDBC quello che dovete fare altro processo:
public class MySqlJDBCDaoFactory extends DAOFactory {
@Override
public List<UserDTO> listAllUsers() {
//Connection = DriverManager ...
//PreparedStatement ps = connection.prepareStatement("select * from ...");
//ResultSet = ps.executeQuery()
// and so on...
return null;
}
}
Poi si richiama la tua fabbrica in questo modo:
DAOFactory myfactory = DAOFactory.getDAOFactory(DAOFactory.MYSQL_JDBC);
List<UserDTO> list = myfactory.listAllUsers();
E se riesci a vedere, non importa se cambi la struttura del tuo database o la modalità di persistenza, non devi re-inventare il ruota, cambia semplicemente un parametro e otterrai l'implementazione per la persistenza che desideri, basata semplicemente su un parametro.
Spero che possa aiutarti a capire lo schema, non uso EJB e, se stai utilizzando DAO, non penso sia ancora necessario implementare EJB.
migliori saluti
Vedere questa domanda simile: http://programmers.stackexchange.com/questions/97423/are-there-any-real-benifits-to-a-dao-layer – Dave
Il problema è: questo è cinese per me! Non so nemmeno cosa faccia DAO, perché creo solo interfacce DAO. È un livello di astrazione come PDO per PHP? O più come un ORM come Doctrine? – mimipc