DAO (データ アクセス オブジェクト) は、基本的にプログラミングのパターンです。これを使用するには、ある種の永続化ユニット (db、ファイル システム、xml など) への抽象インターフェイスを提供するオブジェクトを作成するクラスを作成する必要があります。それは役に立ちますか?データベースの詳細を公開することなく、いくつかの特定のデータ操作を提供するためです。
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;
}
}
}
次に、アプリケーションで管理する永続性の種類ごとに特定のファクトリを作成する必要があります。その特定のファクトリは、永続化に使用するメソッドを実装する必要があります。たとえば、listAllUsers();
たとえば、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;
}
}
MySQL JDBC の場合、他のプロセスを実行する必要があります。
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;
}
}
次に、次の方法でファクトリを呼び出します。
DAOFactory myfactory = DAOFactory.getDAOFactory(DAOFactory.MYSQL_JDBC);
List<UserDTO> list = myfactory.listAllUsers();
また、データベース フレームワークや永続化モードを変更しても、車輪を再発明する必要はなく、パラメーターを変更するだけで、パラメーターに基づいて、必要な永続化の実装を取得できます。
パターンを理解するのに役立つことを願っています。私は EJB を使用していません。DAO を使用している場合でも、EJB を実装する必要はないと思います。
よろしくお願いします