package com.heo.dao.base;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class GenericHibernateDao<T extends Serializable, PK extends Serializable>
extends HibernateDaoSupport implements GenericDao<T, PK> {
// 实体类类型(由构造方法自动赋值)
private Class<T> entityClass;
// 构造方法,根据实例类自动获取实体类类型
public GenericHibernateDao()
{
this.entityClass = null;
Class c = getClass();
Type t = c.getGenericSuperclass();
if (t instanceof ParameterizedType)
{
Type[] p = ((ParameterizedType) t).getActualTypeArguments();
this.entityClass = (Class<T>) p[0];
}
}
// -------------------- 基本检索、增加、修改、删除操作 --------------------
// 根据主键获取实体。如果没有相应的实体,返回 null。
public T get(PK id)
{
return (T) getHibernateTemplate().get(entityClass, id);
}
// 根据主键获取实体并加锁。如果没有相应的实体,返回 null。
public T getWithLock(PK id, LockMode lock)
{
T t = (T) getHibernateTemplate().get(entityClass, id, lock);
if (t != null)
{
this.flush(); // 立即刷新,否则锁不会生效。
}
return t;
}
// 根据主键获取实体。如果没有相应的实体,抛出异常。
public T load(PK id)
{
return (T) getHibernateTemplate().load(entityClass, id);
}
// 根据主键获取实体并加锁。如果没有相应的实体,抛出异常。
public T loadWithLock(PK id, LockMode lock)
{
T t = (T) getHibernateTemplate().load(entityClass, id, lock);
if (t != null)
{
this.flush(); // 立即刷新,否则锁不会生效。
}
return t;
}
// 获取全部实体。
public List<T> loadAll()
{
return (List<T>) getHibernateTemplate().loadAll(entityClass);
}
// loadAllWithLock() ?
// 更新实体
public void update(T entity)
{
getHibernateTemplate().update(entity);
}
// 更新实体并加锁
public void updateWithLock(T entity, LockMode lock)
{
getHibernateTemplate().update(entity, lock);
this.flush(); // 立即刷新,否则锁不会生效。
}
// 存储实体到数据库
public void save(T entity)
{
getHibernateTemplate().save(entity);
}
// saveWithLock()?
// 增加或更新实体
public void saveOrUpdate(T entity)
{
getHibernateTemplate().saveOrUpdate(entity);
}
// 增加或更新集合中的全部实体
public void saveOrUpdateAll(Collection<T> entities)
{
getHibernateTemplate().saveOrUpdateAll(entities);
}
// 删除指定的实体
public void delete(T entity)
{
getHibernateTemplate().delete(entity);
}
// 加锁并删除指定的实体
public void deleteWithLock(T entity, LockMode lock)
{
getHibernateTemplate().delete(entity, lock);
this.flush(); // 立即刷新,否则锁不会生效。
}
// 根据主键删除指定实体
public void deleteByKey(PK id)
{
this.delete(this.load(id));
}
// 根据主键加锁并删除指定的实体
public void deleteByKeyWithLock(PK id, LockMode lock)
{
this.deleteWithLock(this.load(id), lock);
}
// 删除集合中的全部实体
public void deleteAll(Collection<T> entities)
{
getHibernateTemplate().deleteAll(entities);
}
// -------------------- HSQL ----------------------------------------------
// 使用HSQL语句直接增加、更新、删除实体
public int bulkUpdate(String queryString)
{
return getHibernateTemplate().bulkUpdate(queryString);
}
// 使用带参数的HSQL语句增加、更新、删除实体
public int bulkUpdate(String queryString, Object[] values)
{
return getHibernateTemplate().bulkUpdate(queryString, values);
}
// 使用HSQL语句检索数据
public List find(String queryString)
{
return getHibernateTemplate().find(queryString);
}
// 使用带参数的HSQL语句检索数据
public List find(String queryString, Object[] values)
{
return getHibernateTemplate().find(queryString, values);
}
// 使用带命名的参数的HSQL语句检索数据
public List findByNamedParam(String queryString, String[] paramNames, Object[] values)
{
return getHibernateTemplate().findByNamedParam(queryString, paramNames, values);
}
// 使用命名的HSQL语句检索数据
public List findByNamedQuery(String queryName)
{
return getHibernateTemplate().findByNamedQuery(queryName);
}
// 使用带参数的命名HSQL语句检索数据
public List findByNamedQuery(String queryName, Object[] values)
{
return getHibernateTemplate().findByNamedQuery(queryName, values);
}
// 使用带命名参数的命名HSQL语句检索数据
public List findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values)
{
return getHibernateTemplate().findByNamedQueryAndNamedParam(queryName, paramNames, values);
}
// 使用HSQL语句检索数据,返回 Iterator
public Iterator iterate(String queryString)
{
return getHibernateTemplate().iterate(queryString);
}
// 使用带参数HSQL语句检索数据,返回 Iterator
public Iterator iterate(String queryString, Object[] values)
{
return getHibernateTemplate().iterate(queryString, values);
}
// 关闭检索返回的 Iterator
public void closeIterator(Iterator it)
{
getHibernateTemplate().closeIterator(it);
}
// -------------------------------- Criteria ------------------------------
// 创建与会话无关的检索标准
public DetachedCriteria createDetachedCriteria()
{
return DetachedCriteria.forClass(this.entityClass);
}
// 创建与会话绑定的检索标准
public Criteria createCriteria()
{
return this.createDetachedCriteria().getExecutableCriteria(this.getSession());
}
// 检索满足标准的数据
public List findByCriteria(DetachedCriteria criteria)
{
return getHibernateTemplate().findByCriteria(criteria);
}
// 检索满足标准的数据,返回指定范围的记录
public List findByCriteria(DetachedCriteria criteria, int firstResult, int maxResults)
{
return getHibernateTemplate().findByCriteria(criteria, firstResult, maxResults);
}
// 使用指定的实体及属性检
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
heo.zip (50个子文件)
heo
pom.xml 13KB
target
test-classes
m2e-wtp
web-resources
META-INF
maven
com.heo
heo
pom.xml 13KB
pom.properties 201B
MANIFEST.MF 111B
classes
jdbc.properties 166B
log4j.properties 1KB
com
heo
dao
UserInfoDao.class 241B
base
HibernateDaoImpl.class 4KB
BaseDao.class 786B
GenericDao.class 2KB
GenericHibernateDao.class 11KB
BaseDaoImpl.class 5KB
impl
UserInfoDaoImpl.class 565B
controller
UserInfoController.class 623B
service
BaseService.class 332B
UserInfoService.class 259B
impl
UserInfoServiceImpl.class 1KB
entity
UserInfo.class 2KB
config.properties 40B
applicationContext.xml 3KB
.settings
org.eclipse.m2e.core.prefs 90B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.project.facet.core.xml 252B
org.eclipse.wst.common.component 825B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.validation.prefs 50B
org.hibernate.eclipse.console.prefs 80B
.jsdtscope 508B
org.eclipse.jdt.core.prefs 430B
src
test
resources
java
main
webapp
WEB-INF
web.xml 2KB
dispatcher-servlet.xml 2KB
index.jsp 606B
resources
jdbc.properties 166B
log4j.properties 1KB
config.properties 40B
applicationContext.xml 3KB
java
com
heo
dao
base
BaseDao.java 1KB
BaseDaoImpl.java 4KB
HibernateDaoImpl.java 2KB
GenericDao.java 5KB
GenericHibernateDao.java 12KB
impl
UserInfoDaoImpl.java 305B
UserInfoDao.java 155B
controller
UserInfoController.java 396B
service
UserInfoService.java 133B
impl
UserInfoServiceImpl.java 717B
BaseService.java 392B
entity
UserInfo.java 1KB
.project 1KB
.classpath 1006B
共 50 条
- 1
资源评论
- 叉排骨2014-12-30还不错,就是不能运行
tangkai007
- 粉丝: 1
- 资源: 29
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功