一个通用的问题---如何实现一个类处理多个表,并非简单用泛型实现

问题描述

程序的总体结构是这样的: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

时间: 2024-08-29 11:21:04

一个通用的问题---如何实现一个类处理多个表,并非简单用泛型实现的相关文章

PHP跳转函数和一个通用的操作提示类的编写

PHP 跳转,即重定向浏览器到指定的 URL,是一个很常见的功能.这种功能也有一些细节性的要求,比如等待多少秒以后跳转,用不用JavaScript实现跳转,等等.下面的跳转方法考虑到很多,并参数化,可以用到具体的项目当中. <?php /** * 重定向浏览器到指定的 URL * * @param string $url 要重定向的 url * @param int $delay 等待多少秒以后跳转 * @param bool $js 指示是否返回用于跳转的 JavaScript 代码 * @p

javascript-Javascript,一个通用的实现类继承的函数

问题描述 Javascript,一个通用的实现类继承的函数 var A = function() { this.a = 3; } var B = function() { this.b = 6; } function ext(A, B) { var subclass = B; //構造一個新的同名類類,用他來繼承父類,並且調用子類都構造函數 var B = function() { A.apply(this.arguments); subclass.apply(this.arguments);

Zebra_Pagination 1.2发布 一个通用的PHP类

Zebra_Pagination 1.2该版本为了避免重复的内容已不再包括第一页链接"页"参数.作了一些代码的优化. Zebra_Pagination 是一个通用的 PHP 类,用来根据记录数和每页显示数自动生成分页链接.由于这是一个通用的分页类,它不显示任何记录.它获取开发者的实际数据,并基于这个类返回的信息显示.它的优点是可以用来分页,对来任何来源的记录.外观是通过CSS控制. Zebra_Pagination的代码是大量的注释,当PHP的http://www.aliyun.com

打造一个通用ASP.NET数据分页控件

asp.net|分页|控件|数据 对于几乎所有的数据表现Web应用来说,组织好数据的显示方式.避免给用户带来混乱的感觉就是最主要的目标之一.每个页面显示20条记录当然是可以接受的,但每页显示10000条记录就很容易给用户带来不便了.将数据分成多个页面显示,即对数据进行分页,是解决此类问题的最常见的办法. 一.慨述 ASP.NET本身只提供了一个支持数据分页的控件,即DataGrid分页控件,不过它比较适合Intranet环境使用,对于Internet环境来说,DataGrid分页控件提供的功能似

一个通用的DataGridTableStyle的做法

datagrid 一个通用的DataGridTableStyle的做法 哈,这两天都喜欢写"通用"的东西. 这个类,可以实现自适应列宽.只读.时分显示.事件.任意位置加列.单击单元格背景色设置等等,操作简便.只是时间关系(明天要出去一趟),今天没办法完善.仅供参考,你可以加入别的东西.以下只列代码了,不清楚的自己试用查资料就行了. Public Class TableStyle Private m_DataGridTableStyle As DataGridTableStyle Pri

Digester:一个通用xml引擎的设计剖析

   一:Digester介绍    Digester是Jakarta 子项目Commons下的一个模块,支持基于规则的对任意XML文档的处理.它最初是Structs项目的 一部分,后因其通用性而划归Commons.    本文不是描述Digester如何使用,而是深入分析Digester的源码,对其设计进行分析,从而从中学到设计方法和一些设计 理念,正所谓"授人鱼,不如授人以渔".      二:不好的设计   Digester要解决的问题看起来很简单:根据xml文件定义,来生成指定

一个通用并发对象池的实现

原文链接,译文链接,原文作者: Sarma Swaranga,本文最早发表于deepinmind,校对:郑旭东 这篇文章里我们主要讨论下如何在Java里实现一个对象池.最近几年,Java虚拟机的性能在各方面都得到了极大的提升,因此对大多数对象而言,已经没有必要通过对象池来提高性能了.根本的原因是,创建一个新的对象的开销已经不像过去那样昂贵了. 然而,还是有些对象,它们的创建开销是非常大的,比如线程,数据库连接等这些非轻量级的对象.在任何一个应用程序里面,我们肯定会用到不止一个这样的对象.如果有一

写一个通用的代码生成器

       代码生成器对于JAVA码农来说并不陌生.在一些业务性比较强,但编码比较规范的项目中,往往会有大量的重复或者类似的代码要写.比如对表的增删改查,比如生成用于远程调用的客户端方法存根等等.面对这种情况,程序员通常的做法就是拿一个现成模块的代码copy过来再改改.于是,为了避免这种低效而容易出错的编码方式,诞生了各种各样的能跟据当前项目特证自动生成代码的代码生成器程序.这种程序的本质上就是将大量重复的复制修改工作用程序自动来做,以便自动产生适合自己项目的代码.        然而,这种代

共享一个用反射实现的任意实体类之间的数据“复制或合并”代码(十行以内),控制非常的灵活~~~

问题描述 1.说明:string[]reqItems是需要复制的列属性,可以在调用的时候就指定复制哪些字段,而略过其它不需要复制的字段.boolcreate指定是复制,还是新建?2.用途:(1)用于相同实体类之间的数据复制.(2)用于不同实体类之间的数据复制.(3)用于多个实体类合成为新的实体类.3.示例:下面是我们原来更新数据时的代码,是不是很麻烦?varrow=rows.FirstOrDefault();if(row==null)continue;row.StockCode=webItem.