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のために:MySQLのJDBC用
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;
}
}
あなたが他のプロセスを実行する必要があります。
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を実装する必要はないと思います。
敬具
は、この同様の質問を参照してください:http://programmers.stackexchange.com/questions/97423/are-there-any-real-benifits-to-a-dao-layerを – Dave
問題は次のとおりです。これは私にとって中国語です!私はDAOのインターフェイスを作成するだけなので、DAOが何をしているのか分かりません。 PHP用のPDOのような抽象レイヤーですか?あるいは、DoctrineのようなORMのようなもの? – mimipc