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、Hibernate、Spring 和 DWR 是四个在Java Web开发中非常重要的框架,它们各自在不同的领域提供了强大的功能,并且能够通过整合实现更高效、更灵活的应用开发。接下来,我们将详细探讨这些技术以及它们如何...
总结起来,"DWR+extjs+spring+hibernate"的组合是现代Web应用开发的一个强大工具集,它能够帮助开发者快速构建出交互性强、性能优异的企业级应用。通过深入理解和熟练掌握这四个技术,可以显著提升开发者的技能水平...
DWR+Struts+spring+hibernate的订货系统,自己添加的dwr功能
"Struts2 + Spring + Hibernate + DWR"是一个常见的Java Web开发框架组合,用于构建动态、数据驱动的Web应用程序。这个项目部署笔记将深入探讨这四个组件的核心功能以及它们如何协同工作。 首先,Struts2是一个基于...
struts1+spring+hibernate+dwr 项目 满意度调查struts1+spring+hibernate+dwr 项目 满意度调查struts1+spring+hibernate+dwr 项目 满意度调查struts1+spring+hibernate+dwr 项目 满意度调查
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...
Struts2、Spring、Hibernate和DWR是Java Web开发中常用的四大框架,它们各自负责不同的职责,协同工作可以构建出高效、稳定且易于维护的Web应用程序。本项目整合了这四大框架,实现了用户注册、多级下拉联动及表格...
用户注册和登录是每个系统的必须存在的一部分,基于Dwr+Struts2+Spring+Hibernate写了一个用户登录注册系统。 其中用Dwr去进行用户注册的用户是否存在的验证。 全部业务控制交由Spring去进行处理。事务处理也...
Spring+Hibernate+Ext+dwr做的一个简单的grid的增删改查,面板布局, 通过autoload方式载入grid ,以及XML树的建立 ,连接MySql数据库 。JS文件代码在Demo文件夹下,JAVA代码在src下。适合新手
标题 "struts2+spring+hibernate+jquery+dwr+json" 描述了一个集成的Web应用程序开发框架,其中包含了多个关键技术和库。这个框架旨在提高开发效率,提供灵活的数据管理,以及用户友好的前端交互。 1. Struts2:...
学习对象:熟悉JavaScript, 了解JSTL, servlet/JSP, Struts 1.2, Hibernate, Spring, Ajax技术。 该示例使用MyEclipse 5.5 IDE用来整合四个技术(Struts 1.2, Spring 2.0, Hibernate 3.2和Ajax技术)的轻量级的...
Struts、Spring 和 Hibernate 是Java Web开发中的三大框架,它们的组合通常被称为SSH(Struts、Spring、Hibernate)。这个“struts+spring+hibernate开发 注册小实例”是为初学者设计的一个教程,目的是帮助他们快速...
"ext2.0+Hibernate+dwr+spring列子" 文件可能是项目的源代码,包含了具体实现这些技术集成的示例代码。 现在,让我们深入探讨一下这些技术: 1. **Ext JS(ext2)**:这是一个用于构建富互联网应用程序(RIA)的...
公文管理、申请审批、公告管理、会议管理、权限管理、个人办公、客户管理、人事等等。项目技术:Struts1.2 + Hibernate3.0 + Spring2 +DWR。java毕业设计 jsp毕业设计 ssh毕业设计
该源码成功整合了Struts2.0+Hibernate+Spring(SSH架构)+DWR+MySql+Tomcat,直接拷贝部署就可以运行,前提建立相应的数据库。模块包括(组织机构管理,人员管理,角色管理,权限管理等等),每个模块均有增删查改等...
Struts2、Spring、Hibernate和DWR是Java Web开发中常用的四大框架,它们各自负责不同的功能,协同工作能构建出高效、灵活的企业级应用。在这个小实例中,开发者结合这四个框架来展示了一个完整的后端架构。 Struts2...
《DWR+Spring+Hibernate整合应用详解》 在IT领域,DWR(Direct Web Remoting)、Spring和Hibernate是三个至关重要的技术组件,它们分别在Web应用程序的远程调用、依赖注入和对象关系映射方面发挥着核心作用。将这三...
struts1+spring+hibernate+DWR整合方案详解
标题 "一个Spring+hibernate+dwr的例子程序" 暗示了这是一个使用Java企业级开发框架构建的应用程序。这个程序结合了Spring、Hibernate和Direct Web Remoting (DWR)这三个核心组件,来实现高效、动态的Web应用程序。 ...