建议设计一个BaseDao的实现,在其中封装对象的基本操作方法!
然后其它的Dao继承自这个BaseDao,直接使用对象的基本操作方法!
然后其它的Dao继承自这个BaseDao,直接使用对象的基本操作方法!
解决方案 »
- spring3 使用mvc 用freemarker视图,怎么能让页面地址:显示***.html结尾
- xdoclet
- 关于hibernate的缓存机制
- 一个空指针问题
- constrained="true"是什么意思?
- 初学工作流 ,应该看jbpm?shark?osworkflow?Ofbiz ?
- 五湖四海的朋友帮帮忙啊
- Struts标记问题,急!在线等!!!
- 【急求】关于MySql和jdbc连接中文乱码,已经凌乱了。
- Spring中 PropertyPlaceholderConfigurer如何配置绝对路径下的配置文件
- 关于在a.jsp设置Bean,b.jsp取得bean值的问题
- 【新手】问一下hibernate技术的持久化是那中“掉电式”把内存中的内容保存到磁盘中的意思吗
建议设计一个BaseDao的实现,在其中封装对象的基本操作方法!
然后其它的Dao继承自这个BaseDao,直接使用对象的基本操作方法!
==========
不要用继承,用组合!
protected Class<T> domainClass = getDomainClass(); private Class<T> getDomainClass() {
if (domainClass == null) {
ParameterizedType thisType = (ParameterizedType) getClass().getGenericSuperclass();
domainClass = (Class<T>) thisType.getActualTypeArguments()[0];
}
return domainClass;
} @SuppressWarnings("unchecked")
public T load(PK id) {
T obj;
try {
obj = (T) HibernateUtil.currentSession().load(domainClass, id);
if(!Hibernate.isInitialized(obj))
Hibernate.initialize(obj);
return obj;
} catch (ObjectNotFoundException e) {
log.warn("Object not found in class " + domainClass + " with PK " + id);
return null;
}
}
}这样子类不用写多余的代码了
public class UserDAO extends AbstractDAO<User, String> {
}
UserDAO只需要简单的继承父类并指明泛型的实现类,非常方便。
domainClass = (Class<T>) thisType.getActualTypeArguments()[0];关键是这2句。java5还真是不错.....
public Object load(Serializable id);
//其它通用方法声明
}public abstract class AbstractDaoImpl extends HibernateDao implements HibernateDao {
public Object load(Serializable id){
.....
}
}
///////////
然后就很简单了
public interface BookDao extends IDao{
}
public class BookDaoImpl extends AbstractDaoImpl implements BookDao{
}
public interface BookDao extends HibernateDao {
}