我确实看了很多DAO的例子,而且我确实"总是"看到这些通用DAO总是具有从Serializable扩展的泛型类型ID。但这种类型从未在课堂上使用过?那么这背后的背景是什么,或者它仍然是从教程到教程的复制/粘贴问题?希望得到一些回应,thx
使用java和hibernate的DAO的通用实现: Hibernate generic DAO, Generic Service, and Generic View Layer?
答案 0 :(得分:2)
我几乎从未在我的通用DAO中使用通用类型ID。使用
完全没问题public abstract GenericDao<T> {
/**
* Method that returns the number of entries from a table that meet some
* criteria (where clause params)
*
* @param params
* sql parameters
* @return the number of records meeting the criteria
*/
long countAll(Map<String, Object> params);
T create(T t);
void delete(Object id);
T find(Object id);
T update(T t);
}
但在这种情况下,定义主ID而不是长ID是实践:
public abstract GenericDAO<T, PK implements Serializable>
请在此处阅读详细信息Don't repeat the DAO
答案 1 :(得分:1)
Id类型应该在find()
(或任何其他接受id的方法)的声明中使用:
public abstract class GenericDao<E, ID extends Serializable> {
...
public E find(ID id) { ... }
...
}
答案 2 :(得分:0)