`

基于泛型的通用Dao接口和hibernate的实现

阅读更多

基于泛型的通用Dao接口:(主要是在使用hibernate或JPA时使用)

 

  1. package com.qiujy.dao;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. /**
  5.  * 基于泛型的通用Dao接口
  6.  */
  7. public interface GenericDao<T> {
  8.     void create(T entity);
  9.     void delete(T entity);
  10.     void update(T entity);
  11.     
  12.     T findById(Serializable id);
  13.     List<T> findAll();
  14.     List<T> findList(int pageNo, int pageSize);
  15.     int getCountOfAll();
  16. }

hibernate对此泛型Dao接口的使用:

  1. package com.qiujy.dao.hibernate;
  2. import java.io.Serializable;
  3. import java.lang.reflect.ParameterizedType;
  4. import java.util.List;
  5. import org.hibernate.criterion.Projections;
  6. import com.qiujy.common.HibernateUtil;
  7. import com.qiujy.dao.GenericDao;
  8. /**
  9.  * Hibernate对泛型通用Dao接口的实现
  10.  */
  11. public class GenericHibernateDaoImpl<T> implements GenericDao<T> {
  12.     private Class<T> clazz;
  13.     @SuppressWarnings("unchecked")
  14.     public GenericHibernateDaoImpl() {
  15.         //通过反射获取T的类型信息实例
  16.         this.clazz = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass())
  17.                             .getActualTypeArguments()[0];
  18.     }
  19.     public void create(T entity) {
  20.         HibernateUtil.getSession().save(entity);
  21.     }
  22.     public void delete(T entity) {
  23.         HibernateUtil.getSession().delete(entity);
  24.     }
  25.     
  26.     @SuppressWarnings("unchecked")
  27.     public void update(T entity) {
  28.         //HibernateUtil.getSession().saveOrUpdate(entity);
  29.         entity = (T) HibernateUtil.getSession().merge(entity);
  30.     }
  31.     @SuppressWarnings("unchecked")
  32.     public List<T> findAll() {
  33.         return HibernateUtil.getSession().createCriteria(clazz).list();
  34.     }
  35.     @SuppressWarnings("unchecked")
  36.     public List<T> findList(int pageNo, int pageSize) {
  37.         return HibernateUtil.getSession().createCriteria(clazz)
  38.                                          .setFirstResult((pageNo - 1) * pageSize)
  39.                                          .setMaxResults(pageSize)
  40.                                          .list();
  41.     }
  42.     public int getCountOfAll() {
  43.         Integer count = (Integer) HibernateUtil.getSession()
  44.                                                .createCriteria(clazz)
  45.                                                .setProjection(Projections.rowCount())
  46.                                                .uniqueResult();
  47.         if (null == count) {
  48.             return 0;
  49.         } else {
  50.             return count.intValue();
  51.         }
  52.     }
  53.     @SuppressWarnings("unchecked")
  54.     public T findById(Serializable id) {
  55.         return (T)HibernateUtil.getSession().load(clazz, id); //get
  56.     }
  57. }

 

使用泛型Dao接口:

 

  1. package com.qiujy.dao;
  2. import java.util.List;
  3. import com.qiujy.domain.Resource;
  4. /**
  5.  * Resource类的Dao接口
  6.  */
  7. public interface ResourceDao extends GenericDao<Resource> {
  8.     
  9.     public List<Resource> findResources(int status);
  10. }

使用hibernate的实现:

  1. package com.qiujy.dao.hibernate;
  2. import java.util.List;
  3. import com.qiujy.common.HibernateUtil;
  4. import com.qiujy.dao.ResourceDao;
  5. import com.qiujy.domain.Resource;
  6. public class ResourceDaoImpl extends GenericHibernateDaoImpl<Resource> implements ResourceDao {
  7.     @SuppressWarnings("unchecked")
  8.     public List<Resource> findResources(int status) {
  9.         
  10.         return (List<Resource>)HibernateUtil.getSession()
  11.                                     .createQuery("from Resource where status=:status")
  12.                                     .setInteger("status", status)
  13.                                     .list();
  14.     }
  15.     
  16. }
4
1
分享到:
评论

相关推荐

    泛型通用DAO,可以很简化DAO层的代码

    泛型通用DAO是这种模式的一种优化,它利用了Java 5.0引入的泛型和反射机制,大大简化了DAO层的编码工作,提高了代码的可复用性和可维护性。 泛型是Java中的一种类型系统扩展,它允许在编译时声明参数化的类型,从而...

    Hibernate泛型Dao

    【描述】"基于hibernate5 泛型Dao实例,下载后改一下数据库配置直接可以用",意味着这个压缩包文件提供了一个已经实现好的Hibernate5版本的泛型Dao示例项目。用户只需要根据自己的数据库环境修改相应的配置信息,就...

    泛型dao 泛型dao 泛型dao

    泛型dao接口 :GenericDao, ID extends Serializable&gt; 泛型作为DAO的通用接口 CRUD方法 dao接口 : PersonDAO extends GenericDao, Integer&gt; 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 ...

    Hibernate泛型DAO接口,大部分通用都已包括

    本篇将详细介绍"Hibernate泛型DAO接口,大部分通用都已包括"这一主题。 首先,让我们看看DAO的概念。DAO是软件设计模式中的一种,它的主要职责是封装对数据源的访问,以提供业务逻辑层与数据存储层之间的解耦。通过...

    ssh通用基于泛型的dao

    标题“ssh通用基于泛型的dao”指的是使用SSH(Spring、Struts2、Hibernate)框架开发的一个通用的、基于泛型的DAO实现,它旨在提高开发效率,减少重复工作。 SSH框架是Java企业级应用开发的常用组合,Spring提供了...

    hibernate不是泛型的通用DAo1

    "hibernate不是泛型的通用DAo1"这个标题暗示了我们讨论的是一种非泛型化的DAO实现,可能是因为开发者想要避免强制继承和泛型模板。 在描述中提到,开发者在网上寻找的大多数DAO实现都是泛型的,需要继承来使用。...

    基于java泛型的通用DAO(CURD)实现

    现在无论做什么应用,基本上都会有涉及对象... 其实,利用Java面向对象的基本特性及JDK5新引入的泛型语法,我们可以创建通用的DAO对象的CRUD方法,同时又可保证类型的安全性。下面DAO的实现以Hibernate为基础加以演示。

    基于hibernate的泛型Dao框架

    `GenericDao.txt`可能包含的是关于泛型Dao框架的设计文档或者代码示例,详细解释了如何使用泛型Dao进行数据库操作,可能包括如何定义泛型接口,以及如何创建和使用它的实现类。 `bin`目录通常是编译后生成的Java...

    一个很好的通用泛型dao(含源码)

    为什么我们要使用通用DAO接口呢,因为我们的数据库操作无非是增删改查,CRUD操作,我们不需要为每个实体去编写一个dao接口,对于相似的实体操作可以只编写一个通用接口,然后采用不同的实现! DAO已经成为持久层...

    最新修订:基于java泛型的通用DAO(CURD)实现

    现在无论做什么应用,基本上都会有涉及对象... 其实,利用Java面向对象的基本特性及JDK5新引入的泛型语法,我们可以创建通用的DAO对象的CRUD方法,同时又可保证类型的安全性。下面DAO的实现以Hibernate为基础加以演示。

    Struts2 Spring3 Hibernate 注解功能 DAO 泛型 通用分页

    总的来说,"SSHWithAnnotationDemo"项目展示了如何利用现代Java技术栈的高级特性,包括Struts2、Spring3和Hibernate的注解功能,DAO层的泛型设计以及通用的分页实现,来构建一个高效、可维护的Web应用。这样的实践...

    Hibernate泛型DAO(结合spring模板支持)

    泛型DAO是一种设计模式,它通过定义一个通用的DAO接口或抽象类,可以适用于不同的实体类,减少了重复的代码。这种模式的核心在于利用Java的泛型特性,使得DAO方法可以处理任何类型的实体对象,而无需为每个实体类...

    泛型dao

    例如,Hibernate的`Session`接口和`SessionFactory`类就提供了泛型版本的`get()`和`load()`方法,它们能够根据传入的类类型返回相应的实体对象。 另一个标签是“工具”。泛型DAO模式也常被用于开发工具库,比如一些...

    大家看看我设计的泛型DAO(使用Spring的Anotation和Hibernate)

    本篇文章将深入探讨一个使用Spring注解和Hibernate实现的泛型DAO设计,以提高代码的复用性和可维护性。 首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会...

    spring hibernate 泛型DAO

    泛型DAO是一个通用的DAO实现,它使用Java的泛型特性,可以适用于任何继承自特定基类或者实现特定接口的数据实体类。这样,我们只需要编写一次DAO的通用实现,然后在需要的地方通过指定具体的类型即可。 下面是一个...

    ssh通用泛型DAO

    而"dao"目录可能包含了所有DAO接口或者实现的源代码文件,便于组织和管理。 总的来说,"ssh通用泛型DAO"是一种设计模式,旨在简化SSH框架下的数据访问层开发,提高代码复用性,减少重复工作,同时通过泛型提供类型...

    ssh整合下的通用泛型DAO+分页

    在这个特定的讨论中,我们聚焦于SSH1中的一个关键概念:通用泛型DAO(Data Access Object)以及分页功能的实现。DAO层是模型层和数据访问层之间的桥梁,它的主要职责是处理数据库操作,为业务层提供无状态的数据访问...

    Hibernate泛型DAO及使用方法.doc

    而泛型DAO(Data Access Object)则是基于Hibernate进一步抽象出来的一个设计模式,用于提供更通用的数据操作方法。本文档主要探讨了如何在Spring+Hibernate环境中创建和使用泛型DAO。 首先,我们来看一下泛型DAO...

Global site tag (gtag.js) - Google Analytics