`

一个通用的DAO接口及 Hibernate 实现

阅读更多
DAO:
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); 

} 

 

 

Hibernatre实现(分页):

 

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; 
} 
} 

 

 

 

分享到:
评论

相关推荐

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

    基于泛型的通用Dao接口和Hibernate的实现 基于泛型的通用Dao接口是指使用泛型来实现数据访问对象(DAO)的接口,主要是在使用 Hibernate 或 JPA 时使用。泛型可以使得DAO接口更灵活、更通用。 泛型Dao接口的优点:...

    Hibernate_通用DAO模式,一个写好的dao层

    该通用DAO模式的核心在于,它提供了一个基础DAO接口,如`BaseDao&lt;T&gt;`,其中`T`代表任意数据实体类型。这个接口通常包含增删改查等基本方法,例如`save()`, `delete()`, `update()`, `findById()`, `findAll()`等。...

    Hibernate的通用dao

    本篇将深入探讨Hibernate中的通用DAO实现及其相关知识点。 **一、Hibernate简介** Hibernate是一个开源的ORM框架,它通过映射Java类到数据库表,实现了对象和关系数据库之间的无缝转换。通过使用Hibernate,开发者...

    hibernate4 通用dao,service

    由于没有具体的文件列表,我们无法详细讨论每个文件的内容,但根据标题和描述,我们可以推断这是一个关于使用Hibernate4创建通用DAO和Service的教程或资源,旨在帮助Java开发者理解和应用这种模式来提高开发效率。...

    hibernate 通用接口架构

    在面向接口的编程思想下,我们将定义一个通用的DAO接口,例如`GenericDAO, ID&gt;`,其中`T`代表实体类类型,`ID`是主键类型。这个接口通常会包含`save()`, `update()`, `delete()`, `findById()`, `findAll()`等基本...

    Hibernate 原生通用DAO

    **Hibernate原生通用DAO**是基于Hibernate框架设计的一种简化数据访问操作的方式,它模仿了Spring框架中的`HibernateTemplate`类,旨在提供一个简单易用的DAO(Data Access Object)层,方便开发人员进行数据库操作...

    hibernate不是泛型的通用DAo1

    在这种情况下,"hibernate不是泛型的通用DAo1"可能提供了一个无需继承的DAO实现。例如,`DynamicDao`可能是一个非泛型接口,它包含了一些基本的CRUD操作,可以直接被任何类实现,而不需要指定特定的实体类型。`...

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

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

    Hibernate通用Dao设计。

    然而,每个实体类通常都需要一个对应的DAO接口和实现类,这可能导致大量的重复代码。为了解决这个问题,我们可以通过设计一个通用的Hibernate DAO来减少重复工作。 1. **通用Dao的设计思想** - **继承机制**:创建...

    java ssh通用DAO另类实现示例

    在传统的Hibernate DAO实现中,通常会创建一个对应于每个数据库实体的DAO接口和实现类,例如UserDAO接口和UserDAOImpl实现类。然而,这种做法可能导致大量重复的模板代码,如打开和关闭Session,事务管理等。 另类...

    Hibernate泛型Dao

    泛型Dao的出现,就是为了解决这个问题,它允许开发者通过泛型来定义一个通用的Dao接口,从而减少代码量,提高开发效率。 【描述】"基于hibernate5 泛型Dao实例,下载后改一下数据库配置直接可以用",意味着这个...

    一个通用的Hibernate DAO

    ### 一个通用的Hibernate DAO知识点解析...综上所述,这是一个典型的Hibernate DAO层实现示例,它通过封装一系列基本的CRUD(创建、读取、更新、删除)操作,为上层业务逻辑提供了一致的接口,从而简化了数据访问过程。

    Hibernate封装dao层

    创建一个DAO接口,定义所有需要的方法,然后创建一个实现该接口的类,如`UserDaoImpl`,在这个实现类中使用Hibernate API完成实际的数据库操作。 5. **泛型DAO**: 为了进一步提高代码的复用性,可以使用泛型来...

    hibernate通用dao

    **hibernate通用DAO(Data Access Object)**是软件开发中的一个重要概念,它主要用于数据库操作的抽象,使得业务逻辑层可以无需关注具体的SQL语句,从而实现数据访问的解耦。在Java EE应用中,Hibernate作为一款...

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

    在泛型通用DAO中,我们可以定义一个泛型接口或抽象类,比如`GenericDao&lt;T&gt;`,其中`T`代表我们要操作的数据实体类型。这样,我们只需要为每种数据实体创建一个具体的DAO实现类,而无需为每个基本操作重复编写模板代码...

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

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

    通用DAO

    本文将深入探讨Java语言中如何使用反射机制实现通用DAO,并通过提供的"通用DAO源码及示例"来阐述这一概念。 首先,我们需要理解什么是DAO模式。DAO模式是一种软件设计模式,它的主要目标是为应用程序提供一个抽象层...

    HibernateDao.java

    `HibernateDao.java`是Hibernate框架中一个常见的数据访问对象(DAO,Data Access Object)类,它的主要职责是封装对数据库的操作,提供一套面向对象的接口,使得业务逻辑层可以无需关心底层SQL语句,直接通过对象...

    SSH中通用dao类

    总结来说,"SSH中通用DAO类"是基于SSH框架设计的可复用数据访问组件,它利用Spring的DAO支持和Hibernate的ORM能力,提供了一套标准的数据库操作接口和实现,以满足多种业务需求。在实际开发中,这样的DAO设计有助于...

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

    例如,创建一个通用的DAO接口,使用泛型参数表示不同类型的数据实体,如`GenericDao&lt;T&gt;`,然后为每个具体的实体类实现这个接口,如`UserDao extends GenericDao&lt;User&gt;`。这样,大部分CRUD操作就可以在基类中实现,...

Global site tag (gtag.js) - Google Analytics