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

 更新时间:2017年07月11日 15:16:21   作者:ykdsg  
这篇文章主要介绍了Java 中利用泛型和反射机制抽象DAO的实例的相关资料,需要的朋友可以参考下

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核心类库--Date,Calendar,DateFormat类

    深入了解Java核心类库--Date,Calendar,DateFormat类

    这篇文章主要为大家详细介绍了javaDate,Calendar,DateFormat类定义与使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-07-07
  • 从零搭建脚手架之集成Spring Retry实现失败重试和熔断器模式(实战教程)

    从零搭建脚手架之集成Spring Retry实现失败重试和熔断器模式(实战教程)

    在我们的大多数项目中,会有一些场景需要重试操作,而不是立即失败,让系统更加健壮且不易发生故障,这篇文章主要介绍了从零搭建开发脚手架之集成Spring Retry实现失败重试和熔断器模式,需要的朋友可以参考下
    2022-07-07
  • MyBatis中的mapper.xml配置教程

    MyBatis中的mapper.xml配置教程

    这篇文章主要介绍了MyBatis中的mapper.xml配置,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • Java继承的问题引导和测试代码

    Java继承的问题引导和测试代码

    这篇文章主要介绍了Java继承的问题引导和测试代码,涉及继承的概念,合成的语法等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
    2021-08-08
  • spring mvc 读取xml文件数据库配置参数的方法

    spring mvc 读取xml文件数据库配置参数的方法

    下面小编就为大家带来一篇spring mvc 读取xml文件数据库配置参数的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Intellij Idea部署OpenCV 4.0.0环境

    Intellij Idea部署OpenCV 4.0.0环境

    这篇文章主要为大家详细介绍了Intellij Idea部署OpenCV 4.0.0环境,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • springboot pom文件加入监控依赖后没有起作用的解决

    springboot pom文件加入监控依赖后没有起作用的解决

    这篇文章主要介绍了springboot pom文件加入监控依赖后没有起作用的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Java HttpURLConnection使用方法详解

    Java HttpURLConnection使用方法详解

    这篇文章主要为大家详细介绍了Java HttpURLConnection使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • mybatis-plus与mybatis共存的实现

    mybatis-plus与mybatis共存的实现

    本文主要介绍了mybatis-plus与mybatis共存的实现,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Spring中的集合注入代码实例

    Spring中的集合注入代码实例

    这篇文章主要介绍了Spring中的集合注入代码实例,集合注入是指在Spring框架中,通过配置文件或注解的方式将集合类型的数据注入到Bean中,集合类型包括List、Set、Map和Properties等,需要的朋友可以参考下
    2023-11-11

最新评论