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。
此致