问题描述
程序的总体结构是这样的: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")publicclasstab1daoimplextendsbasedao<tab1,Stirng>implementstab1dao<tab1,String>@Repository("tab2dao")publicclasstab2daoimplextendsbasedao<tab2,Stirng>implementstab2dao<tab2,String>@Repository("tab3dao")publicclasstab3daoimplextendsbasedao<tab3,Stirng>implementstab3dao<tab3,String>因为tab1、tab2和tab3的表结构都一样,有没有办法将上面的3个类合并成一个类呢?类似于像下面这样的定义:@Repository("tabdao")publicclasstabdaoimpl<T>extendsbasedao<T,Stirng>implementstabdao<T,String>这样的定义肯定是错误的,不知道应该怎么实现,请高人指点啊!
解决方案
解决方案二:
我用这样的定义试了一下publicclasstabdaoimpl<T>extendsbasedao<T,Stirng>implementstabdao<T,String>再定义一个dao继承上面的类@Repository("tab1dao")publicclasstab1daoimplextendstabdaoimpl<tab1>但还是不行
解决方案三:
没人遇到过这样的问题么?
解决方案四:
publicclasstabdaoimpl<T>implementstabdao<T>;publicclasstabManagerImpl<T>implementstabManager<T>;
因为你说你的表结构都是一样的,所以基本不需要什么basedao了,除非你每个dao的实现是不一样,这个时候你可以加一个basedao;然后再用具体的dao去继承basedao
解决方案五:
tozylzb:表结构一样与继承basedao没关系吧,basedao封装的是一引起基本的CRUD方法啊
解决方案六:
这种情况感觉泛型是可以解决的,不过说实话,没怎么太明白意思。
解决方案七:
你可以在baseDAO中写出公用的方法,例如查询单一对象:publicObjectloadObj(ClassclassName,intid);baseDAOImpl:publicObjectloadObject(ClassclassName,intid)throwsException{returngetHibernateTemplate().load(className,id);}你在dao层中可以用tab1DAO,tab2DAO,tab3DAO分别调用loadObject的方法就可以!也可以直接在service中通过注入baseDaoImpl的方式直接使用loadObject的方法共同使用这个方法!不知道是不是你想要的!呵呵!
解决方案八:
该回复于2011-04-19 15:05:35被版主删除
解决方案九:
这个问题首先跟你的继承是没有多大关系的我现在不看你们的关系究竟是怎么样的但是你可以把所有的结合成一个类那么这个类有两种实现方式你可以把你查询的这些数据直接与你设计的entity进行绑定(数据库查询的时候就绑定)另外一种方式就是你每个表查询出来过后分别赋给你结合的那个实体类这个问题很简单的啊根本不用去考虑什么action不在同一个类中建议你直接在数据库查询的时候就返回多好啊
解决方案十:
你自己也说了单用泛型是不行的~你忘记了一个东西~反射~如果你没有用反射~你的抽象类等于没有什么大作用,basedao可以说没有什么用本想给你写个例子~没时间了~明天上班~
解决方案十一:
给你说一句~只用泛型~肯定不能实现你要的效果
解决方案十二:
此类问题,我一般是直接用hibernate的操作sql功能。有问题加QQ群14471754
解决方案十三:
to:wgw335363240不知道用泛型怎么实现,为了能使问题更明白,我把问题中涉及的程序写了出来!to:leileizwj你说的方法应该可以,但我的程序是没法修改basedao的.to:aspects能给点具体的代码示例吗?to:longintstring我在action中是会用到反射的.to:bbsadsql能根据我今天提供的程序,给出点建议吗?程序地址:http://download.csdn.net/source/3211507
解决方案十四:
有朋友看过程序代码没,有什么意见?
解决方案十五:
你把3个manager整合再一起干嘛?目的是什么?一个action一个manager不刚好吗?没明白为何要这么做,如果要强行弄在一起,用工厂模式嘛,写个工厂类,里面干三个manager实例,一个get<T>方法获取manager
解决方案:
引用14楼pingjiuzhou的回复:
你把3个manager整合再一起干嘛?目的是什么?一个action一个manager不刚好吗?没明白为何要这么做,如果要强行弄在一起,用工厂模式嘛,写个工厂类,里面干三个manager实例,一个get<T>方法获取manager
不是说把3个manager整合在一起,只要能实现同时操作三个表结构一样的表,代码不重复编写就行了.针对我提的问题,写了一些程序代码,程序地址:http://download.csdn.net/source/3211507有空看看!
解决方案:
此问题对应的程序地址:http://download.csdn.net/source/3211507