`

一个通用的DAO接口及其Hibernate3实现

阅读更多
public interface Dao {
/**
  * 保存(持久化)一个对象
  *
  * @param object
  *            要保存的对象
  */
public void save(Object object);

/**
  * 更新一个对象
  *
  * @param object
  *            要修改的对象
  */
public void update(Object object);

/**
  * 用语句更新记录
  *
  * @param queryString
  *            查询语句
  * @param parameters
  *            参数
  */
public void updateByQuery(final String queryString,
   final Object[] parameters);

/**
  * 删除一个对象
  *
  * @param object
  *            要删除的对象
  */
public void delete(Object object);

/**
  * 根据类型和对象id删除一个对象
  *
  * @param clazz
  *            类型
  * @param id
  *            对象id
  */
public void delete(Class clazz, Serializable id);

/**
  * 根据类型删除全部对象
  *
  * @param clazz
  *            类型
  * @return Integer
  */
public Integer deleteAll(final Class clazz);

/**
  * 根据查询和参数删除全部对象
  *
  * @param queryString
  *            查询语句
  * @param parameters
  *            参数
  * @return Integer
  */
public Integer deleteByQuery(final String queryString,
   final Object[] parameters);

/**
  * 获得某个类型的全部对象列表
  *
  * @param clazz
  *            类型
  * @return 对象集合
  */
public List findAll(Class clazz);

/**
  * 根据类型和对象id载入一个对象
  *
  * @param clazz
  *            类型
  * @param id
  *            对象id
  * @return 目标对象
  */
public Object load(Class clazz, Serializable id);

/**
  * 根据类型和对象id从数据库取得一个对象
  *
  * @param clazz
  *            类
  * @param id
  *            对象id
  * @return 目标对象
  */
public Object get(Class clazz, Serializable id);

/**
  * 根据查询语句和查询参数从数据库取得一个对象
  *
  * @param queryString
  *            查询语句
  * @param parameters
  *            参数
  * @return Object 单个对象
  */
public Object get(final String queryString, final Object[] parameters);

/**
  * 命名查询
  *
  * @param queryName
  *            命名查询语句
  * @return 对象列表
  */
public List findByNamedQuery(final String queryName);

/**
  * 依据单个参数做命名查询
  *
  * @param query
  *            命名查询语句
  * @param parameter
  *            单个查询参数
  * @return 对象列表
  */
public List findByNamedQuery(final String queryString,
   final Object parameter);

/**
  * 依据参数数组做命名查询
  *
  * @param query
  *            命名查询语句
  * @param parameters
  *            查询参数数组
  * @return 对象列表
  */
public List findByNamedQuery(final String queryString,
   final Object[] parameters);

/**
  * 查询全部
  *
  * @param query
  *            查询语句
  * @return 对象列表
  */
public List find(final String queryString);

/**
  * 带参数查询全部
  *
  * @param queryString
  *            查询语句
  * @param parameters
  *            查询参数
  * @return 对象列表
  */
public List find(final String queryString, final Object[] parameters);

/**
  * 分页查询
  *
  * @param queryString
  *            查询语句
  * @param parameters
  *            参数
  * @param pageInfo
  *            分页信息
  * @return List 对象列表
  */
public List findPageByQuery(final String queryString,
   final Object[] parameters, final PageInfo pageInfo);

}

以下为Dao的Hibernate3实现

import java.io.*;
import java.util.*;

import org.hibernate.*;
import org.springframework.orm.hibernate3.*;
import org.springframework.orm.hibernate3.support.*;

/**
* 通用DAO的Hibernate实现
*
* @author SunHui
*
*/
public class DaoImpl extends HibernateDaoSupport implements Dao {

public void save(Object object) {
  getHibernateTemplate().save(object);
}

public void update(Object object) {
  getHibernateTemplate().update(object);
}

public void updateByQuery(final String queryString, final Object[] parameters) {
  getHibernateTemplate().execute(new HibernateCallback() {
   public Object doInHibernate(Session session) {
    Query query = session.createQuery(queryString);
    if (parameters != null) {
     for (int i = 0; i < parameters.length; i++) {
      query.setParameter(i, parameters[i]);
     }
    }
    query.executeUpdate();
    return null;
   }
  });
}

public void delete(Object object) {
  getHibernateTemplate().delete(object);
}

public void delete(Class clazz, Serializable id) {
  getHibernateTemplate().delete(load(clazz, id));
}

public Integer deleteAll(final Class clazz) {
  return (Integer) getHibernateTemplate().execute(
    new HibernateCallback() {
     public Object doInHibernate(Session session) {
      Query query = session.createQuery("delete "
        + clazz.getName());
      return new Integer(query.executeUpdate());
     }
    });
}

public List findAll(Class clazz) {
  return getHibernateTemplate().find("from " + clazz.getName());
}

public Object load(Class clazz, Serializable id) {
  return getHibernateTemplate().load(clazz, id);
}

public Object get(Class clazz, Serializable id) {
  return getHibernateTemplate().get(clazz, id);
}

public List findByNamedQuery(final String queryName) {
  return getHibernateTemplate().findByNamedQuery(queryName);
}

public List findByNamedQuery(final String queryName, final Object parameter) {
  return getHibernateTemplate().findByNamedQuery(queryName, parameter);
}

public List findByNamedQuery(final String queryName, final Object[] parameters) {
  return getHibernateTemplate().findByNamedQuery(queryName, parameters);
}

public List find(final String queryString) {
  return getHibernateTemplate().find(queryString);
}

public List find(final String queryString, final Object[] parameters) {
  return getHibernateTemplate().find(queryString, parameters);
}

public List findPageByQuery(final String queryString, final Object[] parameters,
   final PageInfo pageInfo) {
  return (List) getHibernateTemplate().execute(new HibernateCallback() {
   public Object doInHibernate(Session session)
     throws HibernateException {
    Query query = session.createQuery(queryString);
    if (parameters != null) {
     for (int i = 0; i < parameters.length; i++) {
      query.setParameter(i, parameters[i]);
     }
    }
    ScrollableResults sr = query.scroll();
    sr.last();
    int totalCount = sr.getRowNumber();
    int startIndex = (pageInfo.getPageIndex() - 1) * pageInfo.getPageSize();
    query.setMaxResults(pageInfo.getPageSize());
    query.setFirstResult(startIndex);
    int totalRec = totalCount + 1;
    pageInfo.setTotalRec(totalRec);
    int totalPage = (totalRec % pageInfo.getPageSize() == 0) ? (totalRec / pageInfo.getPageSize())
      : (totalRec / pageInfo.getPageSize()) + 1;
    int[] pageNumbers = new int[totalPage];
    for (int i = 0; i < totalPage; i++) {
     pageNumbers[i] = (i + 1);
    }
    pageInfo.setPageNumbers(pageNumbers);
    pageInfo.setTotalPage(totalPage);
    pageInfo.setPageSize(pageInfo.getPageSize());
    pageInfo.setPageIndex(pageInfo.getPageIndex());
    pageInfo.setPrePage(pageInfo.getPageIndex() - 1);
    pageInfo.setNextPage(pageInfo.getPageIndex() + 1);
    return query.list();
   }
  }, true);
}

public Integer deleteByQuery(final String queryString, final Object[] parameters) {
  return (Integer) getHibernateTemplate().execute(
    new HibernateCallback() {
     public Object doInHibernate(Session session) {
      Query query = session.createQuery(queryString);
      if (parameters != null) {
       for (int i = 0; i < parameters.length; i++) {
        query.setParameter(i, parameters[i]);
       }
      }
      return new Integer(query.executeUpdate());
     }
    });
}

public Object get(final String queryString, final Object[] parameters) {
  List list = getHibernateTemplate().find(queryString, parameters);
  if (list != null && !list.isEmpty()) {
   return list.get(0);
  }
  return null;
}
}


/**
* 通用分页信息类,用于承载分页信息
*
* @author SunHui
*
*/
public class PageInfo {
/**
  * 总页数
  */
private int totalPage = 1;

/**
  * 前一页
  */
private int prePage = 1;

/**
  * 下一页
  */
private int nextPage = 1;

/**
  * 总记录数
  */
private int totalRec = 0;

/**
  * 默认每页记录数
  */
private final int defaultPageSize = 10;

/**
  * 每页记录数
  */
private int pageSize = defaultPageSize;

/**
  * 当前页码
  */
private int pageIndex = 1;

/**
  * 全部页码,从1开始
  */
private int[] pageNumbers;

public int getPageIndex() {
  return pageIndex;
}

public void setPageIndex(int pageIndex) {
  this.pageIndex = pageIndex > 0 ? pageIndex : 1;
}

public int getNextPage() {
  return nextPage;
}

public void setNextPage(int nextPage) {
  this.nextPage = nextPage > this.totalPage ? this.totalPage : nextPage;
}

public int getPageSize() {
  return pageSize;
}

public void setPageSize(int pageSize) {
  this.pageSize = pageSize > 0 ? pageSize : 10;
}

public int getPrePage() {
  return prePage;
}

public void setPrePage(int prePage) {
  this.prePage = prePage < 1 ? 1 : prePage;
}

public int getTotalPage() {
  return totalPage;
}

public void setTotalPage(int totalPage) {
  this.totalPage = totalPage > 0 ? totalPage : 1;
}

public int getTotalRec() {
  return totalRec;
}

public void setTotalRec(int totalRec) {
  this.totalRec = totalRec > -1 ? totalRec : 0;
}

public int[] getPageNumbers() {
  return pageNumbers;
}

public void setPageNumbers(int[] pageNumbers) {
  this.pageNumbers = pageNumbers;
}
}



分享到:
评论

相关推荐

    Hibernate的通用dao

    2. **实现接口**:接着,创建一个实现该接口的类,如`HibernateDaoImpl&lt;T&gt;`,并利用Hibernate的Session接口来完成实际的数据库操作。这里需要注入SessionFactory实例,通常通过Spring框架的依赖注入实现。 3. **...

    Hibernate泛型Dao

    在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data Access Object)接口及其实现类,这无疑增加了大量重复的代码。泛型Dao的出现,就是为了解决这个问题,它允许开发者通过泛型来定义一...

    hibernate3必要jar包

    Hibernate3 是一个非常重要的Java持久化框架,它允许开发者将对象模型与数据库关系模型进行映射,从而简化了数据存取的过程。这个压缩包“hibernate3必要jar包”显然是针对Hibernate3版本的,已经去除了冗余的库文件...

    一个Spring MVC和Hibernate一起使用的个人暂存

    这个文件可能包含了项目的初始化配置、实体类、DAO接口及其实现、Service接口及实现,以及Spring的配置文件等。 在实际应用中,开发者通常会创建一个或多个实体类来映射数据库表,这些实体类需要继承Hibernate的...

    spring3.0+hibernate3.3+mysql8.0

    在本项目中,我们关注的是一个经典的Java Web开发技术栈:Spring 3.0、Hibernate 3.3以及MySQL 8.0的整合。这个组合是企业级应用中常见的技术选型,它们各自承担着不同的职责,共同构建了一个强大、灵活且可扩展的...

    Struts+Spring+Hibernate框架技术在Web开发中的研究与应用

    2. **创建DAO实现基类**:创建一个DAO基类,该类实现上述定义的通用DAO接口,并提供具体的实现逻辑。在这个基类中,可以通过泛型参数指定操作的具体实体类型。 3. **利用Spring AOP**:通过Spring的AOP功能,可以在...

    dao包封装包

    在本压缩包文件"dao"中,可能包含了多个DAO接口及其对应的实现类,每个对应于不同的数据库表或实体对象。通过分析这些文件,我们可以了解到项目的数据库模型以及数据操作方式。例如,可能有`UserDAO`、`OrderDAO`、`...

    iBATIS-DAO-2

    例如,对于某个特定的DAO,可以有两个实现版本:一个使用iBATIS SQL Maps框架将对象持久化到数据库,另一个则使用Hibernate框架。或者,有一个DAO为另一个DAO提供缓存服务。根据具体场景(如数据库性能受限或内存...

    基于Annotation并对DAO层封装具有分页功能的S2SH整合实例

    在DAO层的封装中,我们需要创建一个通用的DAO接口,如`BaseDAO&lt;T&gt;`,然后为每种实体类创建具体的DAO实现。使用Spring的`@Repository` Annotation标记DAO实现,使其能够被Spring管理。在这个接口中,我们可以定义一个...

    SSH 泛型DAO分页

    这个压缩包文件的标题"SSH 泛型DAO分页"表明它提供了一个实现SSH框架整合的示例,特别关注了泛型DAO(Data Access Object)以及分页功能。下面将详细介绍SSH框架及其分页和泛型DAO的概念。 1. **Struts2**: Struts2...

    Spring MVC4+Hibernate4整合

    - **创建DAO层**:Spring MVC和Hibernate整合时,通常会创建一个通用的DAO接口,如`BaseDao`,并为每个数据库实体类创建对应的DAO实现类,如`UserDaoImpl`,利用Hibernate的Session进行数据库操作。 - **事务管理*...

    使用maven整合spring和hibernate的例子(spring mvc)

    同时,还需要配置Hibernate的实体类、DAO层接口及其实现、Service层接口及其实现、以及Controller层。 接着,创建Hibernate的实体类,通过注解(如@Entity、@Table、@Id、@GeneratedValue等)定义与数据库表的映射...

    truts2.0-spring2.5-hibernate3

    【标题】"truts2.0-spring2.5-hibernate3" 涉及的知识点主要集中在企业级Java开发中的三个核心框架:Struts2、Spring2.5和Hibernate3.3。这三个框架的整合是Java Web开发中常用的技术栈,用于构建高效、灵活且易于...

    Hibernate框架笔记

    5. **添加BaseDao与BaseDaoImpl**:设计通用的数据访问接口(BaseDao)及其实现类(BaseDaoImpl),封装常用的数据库操作方法。 6. **添加单元测试**:编写单元测试代码来验证数据库连接是否正确,以及基本的CRUD...

    论J2EE中Hibernate+Spring架构及其在OA系统开发中的应用

    Hibernate是一个基于Java的开放源代码的持久化中间件,它对JDBC进行了轻量级封装,不仅提供了ORM(对象-关系映射)服务,而且还提供了数据查询和数据缓存等功能。通过Hibernate API,Java开发人员能够更加便捷地操作...

    struts2+spring+hibernate

    在本项目中,`service`包下可能包含一个EquipmentService接口及其实现类,处理业务规则和事务管理。 **Util类**:`util`包中通常包含一些工具类,例如数据校验、日期处理等通用功能,提高代码复用性。 在项目`...

    java软件开发dao层泛型模式

    4. **维护方便**:所有的数据库操作都通过一个统一的接口来实现,降低了维护难度。 #### 五、实现方式 要实现上述的`GenericDao`接口,通常会采用Spring + Hibernate框架。具体的实现方式包括使用Hibernate ...

    Struts+Spring+Hibernate实现上传下载.doc

    Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们各自负责不同的职责,共同构建了一个强大的后端系统。Struts提供了MVC(Model-View-Controller)架构模式,Spring为应用提供依赖注入(DI)和面向切面...

    hibernate>>BaseDAO

    在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问。`BaseDAO`是许多项目中常见的一种设计模式,它代表了数据访问对象...

    Hibernate讲座86页PPT

    在项目实践中,为了进一步优化,可以对Hibernate进行封装,例如创建通用的CRUD操作接口,实现基本的保存、更新、删除和查询功能,减少重复代码。同时,可以通过事务管理来保证数据的一致性,使用Query或Criteria API...

Global site tag (gtag.js) - Google Analytics