我的应用程序中有GenericDAO
abstract public class GenericDAO<T extends BusinessObject> {
public abstract T create(Class<T> o);
public abstract T read(BigInteger id);
public abstract void update(T o);
public abstract void delete(T o);
}
如何制作OracleDAO<T extends BusinessObject> extends GenericDAO<T>
?我想使用Generics
,但所有业务对象都有不同的创建逻辑Statement
。我应该拒绝Generics
并为每个业务对象创建特定的BusinessObjectOracleDAO
吗?
答案 0 :(得分:0)
在这种情况下,泛型类型T
是指DAO持久存在的对象,而不是它来自的数据库。
我建议你让包结构传递这些信息。
将您的通用DAO接口放在名为persistence
的包中,然后为其下的每个数据库实现提供包(例如persistence.oracle
,persistence.mysql
等。)其中每个都有一个为后备数据存储定制的GenericDaoImpl类。
我个人认为这是一个坏主意。您不应该过分依赖特定的数据库。可以用任何关系数据库和JDBC驱动程序一起编写该实现。切换数据库所需要做的就是实现模式,移植数据,并更改驱动程序的JAR。
是的,你必须为每个班级都有DAO。所有细节都不同:架构,查询,映射,创建。你应该尽可能地隔离它们。
我知道的最好的设计是Spring JdbcTemplate
类。它消除了所有样板,并且易于处理关系数据库。