建议设计一个BaseDao的实现,在其中封装对象的基本操作方法!
然后其它的Dao继承自这个BaseDao,直接使用对象的基本操作方法!

解决方案 »

  1.   

    这里面的_RootDAO.java就是BaseDao,里面封装了对Hibernate的一些具体操作,现在我的问题是,现在有众多的DAO,DAOHB,和业务Delegate类,每一个表要对应上面3套类,感觉很多代码都重复,只是操作的PO不同,是否有改进的余地?
      

  2.   

    javapassion(村长赵大宝):
    建议设计一个BaseDao的实现,在其中封装对象的基本操作方法!
    然后其它的Dao继承自这个BaseDao,直接使用对象的基本操作方法!
    ==========
    不要用继承,用组合!
      

  3.   

    用1个BaseDao就够了,其它都多余。
      

  4.   

    如果你使用JDK1.5,可以使用泛型public abstract class AbstractDAO<T, PK extends Serializable> {
    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只需要简单的继承父类并指明泛型的实现类,非常方便。
      

  5.   

    ParameterizedType thisType = (ParameterizedType) getClass().getGenericSuperclass();
    domainClass = (Class<T>) thisType.getActualTypeArguments()[0];关键是这2句。java5还真是不错.....
      

  6.   

    把DAO丢掉, 直接和Hibernate偶合
      

  7.   

    我认为Dao接口还是有其必要性的-虽然这种必要性在使用hibernate的情况下,不是很大,稍微设计下,代码量其实也没什么,如下:public interface HibernateDao {
      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{
    }
      

  8.   

    小错误,应该是
    public interface BookDao extends HibernateDao {
    }