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

发布时间 - 2026-01-11 02:17:27    点击率:

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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  Android自定义listview布局实现上拉加载下拉刷新功能  如何有效防御Web建站篡改攻击?  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  java获取注册ip实例  zabbix利用python脚本发送报警邮件的方法  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  如何快速搭建高效服务器建站系统?  高端企业智能建站程序:SEO优化与响应式模板定制开发  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  如何用虚拟主机快速搭建网站?详细步骤解析  如何在阿里云高效完成企业建站全流程?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  如何用AI帮你把自己的生活经历写成一个有趣的故事?  如何挑选优质建站一级代理提升网站排名?  详解Android中Activity的四大启动模式实验简述  Android使用GridView实现日历的简单功能  网站建设整体流程解析,建站其实很容易!  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何用已有域名快速搭建网站?  JS碰撞运动实现方法详解  香港服务器租用费用高吗?如何避免常见误区?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  原生JS实现图片轮播切换效果  实例解析Array和String方法  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  JavaScript Ajax实现异步通信  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  三星网站视频制作教程下载,三星w23网页如何全屏?  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何为不同团队 ID 动态生成多个非值班状态按钮  如何快速辨别茅台真假?关键步骤解析  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  手机网站制作与建设方案,手机网站如何建设?  米侠浏览器网页背景异常怎么办 米侠显示修复  Laravel怎么在Blade中安全地输出原始HTML内容  linux top下的 minerd 木马清除方法  Laravel怎么调用外部API_Laravel Http Client客户端使用  JS实现鼠标移上去显示图片或微信二维码  如何选择PHP开源工具快速搭建网站?  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  高防服务器租用指南:配置选择与快速部署攻略  利用JavaScript实现拖拽改变元素大小  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南