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
相关文章:
如何用VPS主机快速搭建个人网站?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
建站之星如何快速解决建站难题?
深圳网站制作案例,网页的相关名词有哪些?
外贸公司网站制作哪家好,maersk船公司官网?
存储型VPS适合搭建中小型网站吗?
如何通过WDCP绑定主域名及创建子域名站点?
网站制作公司排行榜,四大门户网站排名?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
广平建站公司哪家专业可靠?如何选择?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
c# 在高并发场景下,委托和接口调用的性能对比
如何选择CMS系统实现快速建站与SEO优化?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
建站之星备案流程有哪些注意事项?
香港服务器租用费用高吗?如何避免常见误区?
建站主机如何安装配置?新手必看操作指南
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
建站之星备案是否影响网站上线时间?
简单实现Android验证码
已有域名和空间如何搭建网站?
湖北网站制作公司有哪些,湖北清能集团官网?
招贴海报怎么做,什么是海报招贴?
如何用wdcp快速搭建高效网站?
MySQL查询结果复制到新表的方法(更新、插入)
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
怎么将XML数据可视化 D3.js加载XML
网站好制作吗知乎,网站开发好学吗?有什么技巧?
如何通过主机屋免费建站教程十分钟搭建网站?
建站主机CVM配置优化、SEO策略与性能提升指南
建站之星安装后如何配置SEO及设计样式?
建站之星好吗?新手能否轻松上手建站?
电商网站制作公司有哪些,1688网是什么意思?
如何快速生成可下载的建站源码工具?
如何通过cPanel快速搭建网站?
如何通过VPS建站实现广告与增值服务盈利?
如何用虚拟主机快速搭建网站?详细步骤解析
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
如何在万网开始建站?分步指南解析
常州自助建站费用包含哪些项目?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
建站VPS选购需注意哪些关键参数?
学校建站服务器如何选型才能满足性能需求?
*请认真填写需求信息,我们会在24小时内与您取得联系。