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接口是指使用泛型来实现数据访问对象(DAO)的接口,主要是在使用 Hibernate 或 JPA 时使用。泛型可以使得DAO接口更灵活、更通用。 泛型Dao接口的优点:...
该通用DAO模式的核心在于,它提供了一个基础DAO接口,如`BaseDao<T>`,其中`T`代表任意数据实体类型。这个接口通常包含增删改查等基本方法,例如`save()`, `delete()`, `update()`, `findById()`, `findAll()`等。...
本篇将深入探讨Hibernate中的通用DAO实现及其相关知识点。 **一、Hibernate简介** Hibernate是一个开源的ORM框架,它通过映射Java类到数据库表,实现了对象和关系数据库之间的无缝转换。通过使用Hibernate,开发者...
由于没有具体的文件列表,我们无法详细讨论每个文件的内容,但根据标题和描述,我们可以推断这是一个关于使用Hibernate4创建通用DAO和Service的教程或资源,旨在帮助Java开发者理解和应用这种模式来提高开发效率。...
在面向接口的编程思想下,我们将定义一个通用的DAO接口,例如`GenericDAO, ID>`,其中`T`代表实体类类型,`ID`是主键类型。这个接口通常会包含`save()`, `update()`, `delete()`, `findById()`, `findAll()`等基本...
**Hibernate原生通用DAO**是基于Hibernate框架设计的一种简化数据访问操作的方式,它模仿了Spring框架中的`HibernateTemplate`类,旨在提供一个简单易用的DAO(Data Access Object)层,方便开发人员进行数据库操作...
在这种情况下,"hibernate不是泛型的通用DAo1"可能提供了一个无需继承的DAO实现。例如,`DynamicDao`可能是一个非泛型接口,它包含了一些基本的CRUD操作,可以直接被任何类实现,而不需要指定特定的实体类型。`...
本篇将详细介绍"Hibernate泛型DAO接口,大部分通用都已包括"这一主题。 首先,让我们看看DAO的概念。DAO是软件设计模式中的一种,它的主要职责是封装对数据源的访问,以提供业务逻辑层与数据存储层之间的解耦。通过...
然而,每个实体类通常都需要一个对应的DAO接口和实现类,这可能导致大量的重复代码。为了解决这个问题,我们可以通过设计一个通用的Hibernate DAO来减少重复工作。 1. **通用Dao的设计思想** - **继承机制**:创建...
在传统的Hibernate DAO实现中,通常会创建一个对应于每个数据库实体的DAO接口和实现类,例如UserDAO接口和UserDAOImpl实现类。然而,这种做法可能导致大量重复的模板代码,如打开和关闭Session,事务管理等。 另类...
泛型Dao的出现,就是为了解决这个问题,它允许开发者通过泛型来定义一个通用的Dao接口,从而减少代码量,提高开发效率。 【描述】"基于hibernate5 泛型Dao实例,下载后改一下数据库配置直接可以用",意味着这个...
### 一个通用的Hibernate DAO知识点解析...综上所述,这是一个典型的Hibernate DAO层实现示例,它通过封装一系列基本的CRUD(创建、读取、更新、删除)操作,为上层业务逻辑提供了一致的接口,从而简化了数据访问过程。
创建一个DAO接口,定义所有需要的方法,然后创建一个实现该接口的类,如`UserDaoImpl`,在这个实现类中使用Hibernate API完成实际的数据库操作。 5. **泛型DAO**: 为了进一步提高代码的复用性,可以使用泛型来...
**hibernate通用DAO(Data Access Object)**是软件开发中的一个重要概念,它主要用于数据库操作的抽象,使得业务逻辑层可以无需关注具体的SQL语句,从而实现数据访问的解耦。在Java EE应用中,Hibernate作为一款...
在泛型通用DAO中,我们可以定义一个泛型接口或抽象类,比如`GenericDao<T>`,其中`T`代表我们要操作的数据实体类型。这样,我们只需要为每种数据实体创建一个具体的DAO实现类,而无需为每个基本操作重复编写模板代码...
为什么我们要使用通用DAO接口呢,因为我们的数据库操作无非是增删改查,CRUD操作,我们不需要为每个实体去编写一个dao接口,对于相似的实体操作可以只编写一个通用接口,然后采用不同的实现! DAO已经成为持久层...
本文将深入探讨Java语言中如何使用反射机制实现通用DAO,并通过提供的"通用DAO源码及示例"来阐述这一概念。 首先,我们需要理解什么是DAO模式。DAO模式是一种软件设计模式,它的主要目标是为应用程序提供一个抽象层...
`HibernateDao.java`是Hibernate框架中一个常见的数据访问对象(DAO,Data Access Object)类,它的主要职责是封装对数据库的操作,提供一套面向对象的接口,使得业务逻辑层可以无需关心底层SQL语句,直接通过对象...
总结来说,"SSH中通用DAO类"是基于SSH框架设计的可复用数据访问组件,它利用Spring的DAO支持和Hibernate的ORM能力,提供了一套标准的数据库操作接口和实现,以满足多种业务需求。在实际开发中,这样的DAO设计有助于...
例如,创建一个通用的DAO接口,使用泛型参数表示不同类型的数据实体,如`GenericDao<T>`,然后为每个具体的实体类实现这个接口,如`UserDao extends GenericDao<User>`。这样,大部分CRUD操作就可以在基类中实现,...