“可插拔” DAO层通常/总是基于接口DAO。例如,让我们考虑一个非常通用的简单示例:
public interface GenericDAO <T, K extends Serializable> { List<T> getAll(Class<T> typeClass); T findByKey(Class<T> typeClass, K id); void update(T object); void remove(T object); void insert(T object); }(这是Morphia的通用DAO中的内容)
然后,您可以开发不同的几种通用DAO实现,在其中可以找到不同的字段(反映在构造函数参数,setter和getter等中)。让我们假设一个基于JDBC的:
public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> { private String db_url; private Connection; private PreparedStatement insert; // etc.}一旦实现了通用DAO(用于具体的数据存储),就可以轻松获得具体的DAO:
public interface PersonDAO extends GenericDAO<Person, Long> {}和
public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {}(顺便说一句,在Morphia的BasicDAO中,您拥有的是MongoDB通用DAO的实现)。



