程序的总体结构是这样的:entity--dao-daoimpl--manager--managerimpl—action,
dao、daoimpl、manager、managerimpl又是分别继承basedao<T,PK>,baseimpl<T,PK>,basemanager<T,PK>,basemanagerimpl<T,PK>,都是用的泛型数据库中现3个表tab1、tab2和tab3,分别对应程序中的3个实体tab1、tab2和tab3
写了3个dao来处理上面定义的3个体,如下:
@Repository("tab1dao")
public class tab1daoimpl extends basedao<tab1,Stirng> implements tab1dao<tab1,String>
@Repository("tab2dao")
public class tab2daoimpl extends basedao<tab2,Stirng> implements tab2dao<tab2,String>
@Repository("tab3dao")
public class tab3daoimpl extends basedao<tab3,Stirng> implements tab3dao<tab3,String>因为tab1、tab2和tab3的表结构都一样,有没有办法将上面的3个类合并成一个类呢?
类似于像下面这样的定义:
@Repository("tabdao")
public class tabdaoimpl<T> extends basedao<T,Stirng> implements tabdao<T,String>
这样的定义肯定是错误的,不知道应该怎么实现,请高人指点啊!

解决方案 »

  1.   

    我用这样的定义试了一下
    public class tabdaoimpl<T> extends basedao<T,Stirng> implements tabdao<T,String>
    再定义一个dao继承上面的类
    @Repository("tab1dao")
    public class tab1daoimpl extends  tabdaoimpl <tab1>
    但还是不行 
      

  2.   


    public class tabdaoimpl<T> implements tabdao<T>;
    public class tabManagerImpl<T> implements tabManager<T>;因为你说你的表结构都是一样的,所以基本不需要什么basedao了,除非你每个dao的实现是不一样,这个时候你可以加一个basedao;然后再用具体的dao去继承basedao
      

  3.   

    to zylzb:
    表结构一样与继承basedao没关系吧,basedao封装的是一引起基本的CRUD方法啊
      

  4.   

    你可以在baseDAO中写出公用的方法,例如查询单一对象:
    public Object loadObj(Class className, int id);
    baseDAOImpl:
    public Object loadObject(Class className, int id) throws Exception {
    return getHibernateTemplate().load(className, id);
    }
    你在dao层中可以用tab1DAO,tab2DAO,tab3DAO分别调用loadObject的方法就可以!也可以直接在service中通过注入baseDaoImpl的方式直接使用loadObject的方法共同使用这个方法!
    不知道是不是你想要的!呵呵!
      

  5.   

            这个问题 首先跟你的继承是没有多大关系的    我现在不看你们的关系 究竟是怎么样的  但是你可以把所有的结合成一个类            那么这个类 有两种实现方式   你可以把你查询的这些数据直接与你设计的entity进行绑定 (数据库查询的时候就绑定)     另外一种方式 就是你每个表查询出来过后 分别赋给你结合的那个实体类          这个问题很简单的啊       根本不用去考虑 什么action 不在同一个类中   建议你直接在数据库查询的时候  就返回多好啊
      

  6.   

    你自己也说了单用泛型是不行的~
    你忘记了一个东西~反射~
    如果你没有用反射~你的抽象类等于没有什么大作用,basedao可以说没有什么用
    本想给你写个例子~没时间了~明天上班~
      

  7.   

    此类问题,我一般是直接用hibernate 的操作sql功能。
    有问题加QQ群14471754
      

  8.   

    to:wgw335363240 不知道用泛型怎么实现,为了能使问题更明白,我把问题中涉及的程序写了出来!
    to:leileizwj 你说的方法应该可以,但我的程序是没法修改basedao的.
    to:aspects  能给点具体的代码示例吗?
    to:longintstring  我在action中是会用到反射的.
    to:bbsadsql  能根据我今天提供的程序,给出点建议吗?程序地址:
    http://download.csdn.net/source/3211507
      

  9.   

    你把3个manager整合再一起干嘛?目的是什么?一个action一个manager不刚好吗?没明白为何要这么做,如果要强行弄在一起,用工厂模式嘛,写个工厂类,里面干三个manager实例,一个get<T>方法获取manager
      

  10.   

    不是说把3个manager整合在一起,只要能实现同时操作三个表结构一样的表,代码不重复编写就行了.针对我提的问题,写了一些程序代码,程序地址:
    http://download.csdn.net/source/3211507 有空看看!
      

  11.   

    此问题对应的程序地址:
    http://download.csdn.net/source/3211507