wxc2100 写道
谢谢楼主回复!本人初学,还有一个问题呀:
public class RegionDAOImpl extends GenericHibernateDAOCrud<Region> implements IRegionDAO {
中的GenericHibernateDAOCrud在那里呀!谢谢了!
GenericHibernateDAOCrud 这个类可以提供给你。它在DAO层对Hibernate增、删、改、查的基类支持。也就是我文章中提到的DAO模式。
package com.ssgly.dao;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.sql.SQLException;
import java.util.*;
import com.ssgly.model.*;
import org.apache.commons.logging.*;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.springframework.dao.DataRetrievalFailureException;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
/**
* This base class is prepared for subclass to do CRUD easily.
*
* @author Tiger
*/
public abstract class GenericHibernateDAOCrud<T> {
protected static final Object[] EMPTY_OBJECT_ARRAY = new Object[] {};
protected Log log = LogFactory.getLog(getClass());
private final Class<T> clazz;
protected HibernateTemplate hibernateTemplate;
/**
* Inject domain's class type in constructor.
*
* @param clazz Domain's class.
*/
public GenericHibernateDAOCrud(Class<T> clazz) {
this.clazz = clazz;
}
/**
* @spring.property name="hibernateTemplate" ref="hibernateTemplate"
*/
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
@SuppressWarnings("unchecked")
public T query(Serializable id) {
T t = (T)hibernateTemplate.get(clazz, id);
if(t==null)
throw new DataRetrievalFailureException("Object not found.");
// it is strange that load() method return a lazy-loading proxy object
// and it may cause LazyInitializationException!
return t;
}
/**
* Default implementation of creating new domain object.
*/
public void create(T t) {
hibernateTemplate.save(t);
}
/**
* Default implementation of deleting new domain object.
*/
public void delete(T t) {
hibernateTemplate.delete(t);
}
/**
* Default implementation of updating domain object.
*/
public void update(T t) {
hibernateTemplate.update(t);
}
/**
* Do an update hql query, return the affected rows.
*
* @param updateHql Update HQL.
* @param values Parameters or null if none.
* @return The affected rows.
*/
protected int executeUpdate(final String updateHql, final Object[] values) {
HibernateCallback updateCallback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(updateHql);
if(values!=null) {
for(int i=0; i<values.length; i++)
query.setParameter(i, values[i]);
}
return new Integer(query.executeUpdate());
}
};
return ((Integer)hibernateTemplate.execute(updateCallback)).intValue();
}
/**
* Prepared for sub-class for convenience. Query for list and also return
* total results' number.
*
* @param selectCount HQL for "select count(*) from ..." and should return a Long.
* @param select HQL for "select * from ..." and should return object list.
* @param values For prepared statements.
* @param page Page object for store page information.
*/
protected List queryForList(final String selectCount, final String select, final Object[] values, final Page page) {
Long count = (Long)queryForObject(selectCount, values);
page.setTotalCount(count.intValue());
if(page.isEmpty())
return Collections.EMPTY_LIST;
return queryForList(select, values, page);
}
/**
* Prepared for sub-class for convenience. Query for list but do not return
* total results' number.
*
* @param select HQL for "select * from ..." and should return object list.
* @param values For prepared statements.
* @param page Page object for store page information.
*/
protected List queryForList(final String select, final Object[] values, final Page page) {
// select:
HibernateCallback selectCallback = new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(select);
if(values!=null) {
for(int i=0; i<values.length; i++)
query.setParameter(i, values[i]);
}
return query.setFirstResult(page.getFirstResult())
.setMaxResults(page.getPageSize())
.list();
}
};
return (List) hibernateTemplate.executeFind(selectCallback);
}
/**
* Prepared for sub-class for convenience. Query for unique result.
*
* @param select HQL for "select * from ..." and should return unique object.
* @param values For prepared statements.
*/
protected Object queryForObject(final String select, final Object[] values) {
HibernateCallback selectCallback = new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(select);
if(values!=null) {
for(int i=0; i<values.length; i++)
query.setParameter(i, values[i]);
}
return query.uniqueResult();
}
};
return hibernateTemplate.execute(selectCallback);
}
protected Object queryForObject(final DetachedCriteria dc) {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) {
return dc.getExecutableCriteria(session).uniqueResult();
}
};
return hibernateTemplate.execute(callback);
}
/**
* Prepared for sub-class for convenience.
*/
protected Object uniqueResult(final DetachedCriteria dc) {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) {
return dc.getExecutableCriteria(session).uniqueResult();
}
};
return hibernateTemplate.execute(callback);
}
protected List queryForLists(final String select, final Object[] values) {
// select:
HibernateCallback selectCallback = new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(select);
if(values!=null) {
for(int i=0; i<values.length; i++)
query.setParameter(i, values[i]);
}
return query.list();
}
};
return (List) hibernateTemplate.executeFind(selectCallback);
}
}
分享到:
相关推荐
Struts2 + spring + hibernate + dwr 完美整合代码 dwr 用户注册 多级下拉联动 刷新表格.. 全部代码
DWR+Struts+spring+hibernate的订货系统,自己添加的dwr功能
使用struts2、hibernate、spring、dwr整合的简单项目。包括级联等 注意:csdn上面显示为chm文件。该文件为.7z的压缩文件。用压缩软件可以打开的 csdn弄错了
struts1+spring+hibernate+dwr 项目 满意度调查struts1+spring+hibernate+dwr 项目 满意度调查struts1+spring+hibernate+dwr 项目 满意度调查struts1+spring+hibernate+dwr 项目 满意度调查
利用dwr,整合extjs,spring,hibernate.是你学习dwr的参考指南
struts2+hibernate+spring+dwr(用户注册)struts2+hibernate+spring+dwr(用户注册)
spring+struts+hibernate+jbpm+dwr整合开发的OA办公系统源码
一个struts2+spring+hibernate+dwr的小实例,不过木有搭建说明,不过有dwr的使用说明,至于表结构可以看映射配置文件就知道创建什么表了
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...
NULL 博文链接:https://jsrookie.iteye.com/blog/294756
用户注册和登录是每个系统的必须存在的一部分,基于Dwr+Struts2+Spring+Hibernate写了一个用户登录注册系统。 其中用Dwr去进行用户注册的用户是否存在的验证。 全部业务控制交由Spring去进行处理。事务处理也...
Spring+Hibernate+Ext+dwr做的一个简单的grid的增删改查,面板布局, 通过autoload方式载入grid ,以及XML树的建立 ,连接MySql数据库 。JS文件代码在Demo文件夹下,JAVA代码在src下。适合新手
Struts+Hibernate+Spring+DWR实例
适合初学者,快速了解struts+spring+hibernate开发 注册小程序 含有SSHjar包
学习对象:熟悉JavaScript, 了解JSTL, servlet/JSP, Struts 1.2, Hibernate, Spring, Ajax技术。 该示例使用MyEclipse 5.5 IDE用来整合四个技术(Struts 1.2, Spring 2.0, Hibernate 3.2和Ajax技术)的轻量级的...
ext2+spring+hibernate+dwr做的小系统,很好的一个研究例子。
重磅推出 struts+spring+hibernate+dwr整合分页例子
struts+hibernate+spring+dwr的案例,采用spring+dwr来实现的小案例
网站框架搭建,涉及struts2+jquery+json、dwr、log日志、过滤器、拦截器。
公文管理、申请审批、公告管理、会议管理、权限管理、个人办公、客户管理、人事等等。项目技术:Struts1.2 + Hibernate3.0 + Spring2 +DWR。java毕业设计 jsp毕业设计 ssh毕业设计