Java 中利用泛型和反射机制抽象DAO的实例

一般的DAO都有CRUD操作,在每个实体DAO接口中重复定义这些方法,不如提供一个通用的DAO接口,具体的实体DAO可以扩展这个通用DAO以提供特殊的操作,从而将DAO抽象到另一层次,令代码质量有很好的提升
1.通用接口
import java.io.Serializable;
import java.util.List;
public interface BaseDao<T> {
T get(Serializable id);
List<T> getAll();
// List<T> find(String hql,);
void save(Object o);
void remove(Object o);
void update(Object o);
}
2.DAO基类
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class HibernateBaseDao<T> extends HibernateDaoSupport implements BaseDao<T>{
private Class<T> entityClass;
public HibernateBaseDao() {
Type genType = getClass().getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
entityClass = (Class)params[0];
}
public T get(Serializable id) {
return (T)getHibernateTemplate().load(entityClass, id);
}
public List<T> getAll() {
return getHibernateTemplate().loadAll(entityClass);
}
public void save(Object o) {
getHibernateTemplate().saveOrUpdate(o);
}
public void remove(Object o) {
getHibernateTemplate().delete(o);
}
public void update(Object o) {
getHibernateTemplate().update(o);
}
}
这里利用反射机制获取泛型对应的实体类的类型
3.实体DAO类
import java.util.Iterator;
import java.util.List;
import com.baobaotao.dao.ForumDao;
import com.baobaotao.dao.HibernateBaseDao;
import com.baobaotao.domain.Forum;
public class ForumHibernateDao2 extends HibernateBaseDao<Forum> implements ForumDao{
public long getForumNum() {
Iterator iter = getHibernateTemplate().iterate(
"select count(f.forumId) from Forum f");
return ((Long)iter.next());
}
}
通过扩展泛型DAO基类,就自动拥有基类的数据操作功能,只要提供特殊的功能即可,实体DAO的编码生产率得到了极大的提高
以上就是Java 中利用泛型和反射机制抽象DAO的实例的讲解,大家如果对泛型及反射机制有不明白的可以查询本站的相关文章或者留言交流,到社区提问,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Java
# 中利用泛型和反射机制抽象DAO
# java泛型及反射机制
# 深入分析JAVA 反射和泛型
# Java使用反射来获取泛型信息示例
# Java 基础详解(泛型、集合、IO、反射)
# java基础之反射和泛型以及注解
# java反射之通过反射了解集合泛型的本质(详解)
# 应用Java泛型和反射导出CSV文件的方法
# Java反射
# 泛型在Json中的运用
# 都有
# 很好
# 不明白
# 相关文章
# 希望能
# 谢谢大家
# 提供一个
# 而将
# 得到了
# 在每个
# 实体类
# hql
# save
# void
# String
# id
# gt
# find
# getAll
# lang
相关文章:
建站之星后台管理如何实现高效配置?
装修招标网站设计制作流程,装修招标流程?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Python文件管理规范_工程实践说明【指导】
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
定制建站是什么?如何实现个性化需求?
建站之星备案是否影响网站上线时间?
建站之家VIP精选网站模板与SEO优化教程整合指南
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
网站制作壁纸教程视频,电脑壁纸网站?
专业网站建设制作报价,网页设计制作要考什么证?
如何在建站宝盒中设置产品搜索功能?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
C#怎么使用委托和事件 C# delegate与event编程方法
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何在IIS中新建站点并配置端口与物理路径?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何用狗爹虚拟主机快速搭建网站?
c# await 一个已经完成的Task会发生什么
教程网站设计制作软件,怎么创建自己的一个网站?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
建站之星如何助力网站排名飙升?揭秘高效技巧
如何在IIS中新建站点并配置端口与IP地址?
大连 网站制作,大连天途有线官网?
制作网站公司那家好,网络公司是做什么的?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
家庭建站与云服务器建站,如何选择更优?
Bpmn 2.0的XML文件怎么画流程图
建站之星伪静态规则如何设置?
建站之星如何开启自定义404页面避免用户流失?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
高防服务器:AI智能防御DDoS攻击与数据安全保障
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
定制建站哪家更专业可靠?推荐榜单揭晓
网站app免费制作软件,能免费看各大网站视频的手机app?
想学网站制作怎么学,建立一个网站要花费多少?
用v-html解决Vue.js渲染中html标签不被解析的问题
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
已有域名能否直接搭建网站?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
北京网站制作网页,网站升级改版需要多久?
XML的“混合内容”是什么 怎么用DTD或XSD定义
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
*请认真填写需求信息,我们会在24小时内与您取得联系。