转载至http://llying.iteye.com/blog/406058
这个东西是一年前弄的,不过一直没用到,里面有些东西已经记不太清了,还好注释应该可以看懂。
目的是希望设计一个基于hibernate的泛型Dao框架
推荐一个J2EE的群:46176507
首先创建一个java项目GenericDao
我们创建一个包com.hb.generic.dao
该包用来作为我们的基础dao包
首先我们创建一个针对单个实体操作的泛型EntityDao<T>接口。
- /**
- * @author llying
- * @company qm
- */
- public interface EntityDao<T> {
- T get(Serializable id);
- List<T> getAll();
- void save(T newInstance);
- void remove(T transientObject);
- void removeById(Serializable id);
- String getIdName(Class clazz);
- }
/** * @author llying * @company qm */ public interface EntityDao<T> { T get(Serializable id); List<T> getAll(); void save(T newInstance); void remove(T transientObject); void removeById(Serializable id); String getIdName(Class clazz); }
用于定义针对单个实体的CRUD操作。
接着我们在定义一个接口类HibernateCallback,定义一个回调接口。
- import org.hibernate.Session;
- /**
- * @author llying
- * @company qm
- */
- public interface HibernateCallback {
- Object doInHibernate(Session session);
- }
import org.hibernate.Session; /** * @author llying * @company qm */ public interface HibernateCallback { Object doInHibernate(Session session); }
接下来我们定义一个com.hb.generic.dao.utils包,
该包的目的是用于防治一些常用方法的抽取,该包中的一些类是我平时的收集和积累。
我们这里只对关键类进行说明
BeanUtils :工具类,通过反射机制对对象进行存取值
GenericUtils:工具类,取得类中的泛型类型
里面基本上都有都有注释
我们在com.hb.generic.dao.support包下创建一个分页类(不做具体介绍,基本上分页都差不多)
我们需要在com.hb.generic.dao包下创建HibernateDaoHandler接口
- import org.hibernate.Session;
- /**
- * @author llying
- * @company qm
- */
- public interface HibernateDaoHandler {
- Session getSession();
- }
import org.hibernate.Session; /** * @author llying * @company qm */ public interface HibernateDaoHandler { Session getSession(); }
在用户使用的时候需要实现该接口获取session
接下来我们会创建HibernateDaoSupport类
Dao的基类: 提供分页函数和若干便捷查询方法,并对返回值作了泛型类型转换.
- package com.hb.generic.dao;
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.hibernate.Criteria;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import org.hibernate.criterion.CriteriaSpecification;
- import org.hibernate.criterion.Criterion;
- import org.hibernate.criterion.Order;
- import org.hibernate.criterion.Projection;
- import org.hibernate.criterion.Projections;
- import org.hibernate.criterion.Restrictions;
- import org.hibernate.impl.CriteriaImpl;
- import org.hibernate.impl.CriteriaImpl.OrderEntry;
- import com.hb.generic.dao.support.Page;
- import com.hb.generic.dao.utils.Assert;
- import com.hb.generic.dao.utils.BeanUtils;
- /**
- * Dao的基类.
- *
- * 提供分页函数和若干便捷查询方法,并对返回值作了泛型类型转换.
- * @author llying
- * @company qm
- */
- public abstract class HibernateDaoSupport<T> implements HibernateDaoHandler {
- private static final Log log = LogFactory.getLog(HibernateDaoSupport.class);
- public Object execute(HibernateCallback action){
- Assert.notNull(action, "Callback object 对象不能为 Null ");
- Session session = getSession();
- Transaction tr = session.beginTransaction();
- Object result = action.doInHibernate(session);
- tr.commit();
- session.close();
- return result;
- }
- /**
- * 获取全部的对象
- * @param <T>
- * @param entityClass 对象类型
- * @return
- */
- @SuppressWarnings("unchecked")
- public <T>List<T> getAll(final Class<T> entityClass) {
- return (List<T>)execute(new HibernateCallback(){
- public Object doInHibernate(Session session) {
- Criteria criteria = session.createCriteria(entityClass);
- return criteria.list();
- }
- });
- }
- /**
- * 获取全部对象,带排序功能
- * @param <T>
- * @param entityClass 实体对象
- * @param orderBy 排序字段
- * @param isAsc 升序或降序
- * @return
- */
- @SuppressWarnings({ "hiding", "hiding", "unchecked" })
- public <T> List <T> getAll(final Class<T> entityClass,final String orderBy,final boolean isAsc){
- Assert.hasText(orderBy);
- return (List<T>) execute(new HibernateCallback(){
- public Object doInHibernate(Session session) {
- if (isAsc)
- return session.createCriteria(entityClass).addOrder(Order.asc(orderBy)).list();
- return session.createCriteria(entityClass).addOrder(Order.desc(orderBy)).list();
- }
- });
- }
- /**
- * 保存对象
- * @param newInstance
- */
- @SuppressWarnings("unused")
- public void saveOrUpdate(final T newInstance){
- execute(new HibernateCallback(){
- public Object doInHibernate(Session session) {
- session.saveOrUpdate(newInstance);
- return null;
- }
- });
- }
- /**
- * 删除对象
- * @param transientObject
- */
- public void remove(final T transientObject) {
- execute(new HibernateCallback(){
- public Object doInHibernate(Session session) {
- session.delete(transientObject);
- return null;
- }
- });
- }
- /**
- *
- * @param entityClass
- * @param id
- */
- public void removeById(Class<T> entityClass, Serializable id) {
- remove( get(entityClass, id));
- }
- /**
- * 根据Id获取对象。
- * @param <T>
- * @param entityClass
- * @param id 实体Id
- * @return 实体对象
- */
- @SuppressWarnings({ "hiding", "unchecked" })
- public <T> T get(final Class<T> entityClass,final Serializable id) {
- return (T) execute(new HibernateCallback(){
- public Object doInHibernate(Session session) {
- return session.get(entityClass, id);
- }
- });
- }
- /**
- * 创建一个Query对象。
- * @param hql
- * @param values
- * @return
- */
- public Query createQuery(String hql,Object...values){
- Assert.hasText(hql);
- Query query = getSession().createQuery(hql);
- for(int i = 0;i<values.length;i++){
- query.setParameter(i, values[i]);
- }
- return query;
- }
- /**
- * 创建Criteria对象。
- * @param <T>
- * @param entityClass
- * @param criterions
- * @return
- */
- public <T>Criteria createCriteria(Class<T> entityClass,Criterion...criterions){
- Criteria criteria = getSession().createCriteria(entityClass);
- for(Criterion c:criterions){
- criteria.add(c);
- }
- return criteria;
- }
- /**
- * 创建Criteria对象,有排序功能。
- * @param <T>
- * @param entityClass
- * @param orderBy
- * @param isAsc
- * @param criterions
- * @return
- */
- public <T>Criteria createCriteria(Class<T> entityClass,String orderBy,boolean isAsc,Criterion...criterions){
- Assert.hasText(orderBy);
- Criteria criteria = createCriteria(entityClass,criterions);
- if(isAsc){
- criteria.addOrder(Order.asc(orderBy));
- }else{
- criteria.addOrder(Order.desc(orderBy));
- }
- return criteria;
- }
- /**
- * 根据hql查询
- * @param hql
- * @param values
- * @return
- */
- public List find(final String hql,final Object...values){
- Assert.hasText(hql);
- return createQuery(hql, values).list();
- /* return (List) execute(new HibernateCallback(){
- public Object doInHibernate(Session session) {
- Query query = session.createQuery(hql);
- for(int i = 0;i<values.length;i++){
- query.setParameter(i, values[i]);
- }
- return query.list();
- }
- });*/
- }
- /**
- * 根据属性名和属性值查询.
- *
- * @return
- */
- public <T>List<T> findBy(Class<T> entityClass,String propertyName,Object value){
- Assert.hasText(propertyName);
- return createCriteria(entityClass, Restrictions.eq(propertyName, value)).list();
- }
- /**
- * 根据属性名和属性值查询. 有排序
- * @param <T>
- * @param entityClass
- * @param propertyName
- * @param value
- * @param orderBy
- * @param isAsc
- * @return
- */
- public <T>List<T> findBy(Class<T> entityClass,String propertyName,Object value,String orderBy,boolean isAsc){
- Assert.hasText(propertyName);
- Assert.hasText(orderBy);
- return createCriteria(entityClass, orderBy, isAsc, Restrictions.eq(propertyName, value)).list();
- }
- /**
- * 根据属性名和属性值 查询 且要求对象唯一.
- *
- * @return 符合条件的唯一对象.
- */
- public <T>T findUniqueBy(Class<T> entityClass,String propertyName,Object value){
- Assert.hasText(propertyName);
- return (T)createCriteria(entityClass, Restrictions.eq(propertyName, value)).uniqueResult();
- }
- /**
- * 分页 通过hql进行
- * @param hql
- * @param pageNo
- * @param pageSize
- * @param values
- * @return
- */
- public Page pagedQuery(String hql,int pageNo,int pageSize,Object...values){
- Assert.hasText(hql);
- Assert.isTrue(pageNo>=1);
- String countQueryString = "select count(*)" + removeSelect(removeOrders(hql));
- System.out.println(countQueryString);
- List countList = find(countQueryString, values);
- long totalCount = (Long) countList.get(0);
- System.out.println(totalCount);
- if(totalCount<1){
- return new Page();
- }
- int startIndex = Page.getStartOfPage(pageNo, pageSize);
- Query query = createQuery(hql,values);
- List list = query.setFirstResult(startIndex).setMaxResults(pageSize).list();
- return new Page(startIndex,totalCount,pageSize,list);
- }
- /**
- * 分页 通过criteria
- * @param criteria
- * @param pageNo
- * @param pageSize
- * @return
- */
- public Page pagedQuery(Criteria criteria,int pageNo,int pageSize){
- Assert.notNull(criteria);
- Assert.isTrue(pageNo>=1);
- CriteriaImpl criteriaImpl = (CriteriaImpl) criteria;
- //先把Projection和OrderBy条件取出来,清空两者来执行Count操作
- Projection projection = criteriaImpl.getProjection();
- List<CriteriaImpl.OrderEntry> orderEntitys = null;
- try {
- orderEntitys=(List<OrderEntry>) BeanUtils.forceGetProperty(criteriaImpl, "orderEntries");
- BeanUtils.forceSetProperty(criteriaImpl, "orderEntries", new ArrayList());
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- }
- //取得总的数据数
- long totalCount = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();
- //将之前的Projection和OrderBy条件重新设回去
- criteria.setProjection(projection);
- if (projection == null) {
- criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
- }
- try {
- BeanUtils.forceSetProperty(criteriaImpl, "orderEntries", orderEntitys);
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- }
- if(totalCount<1)
- return new Page();
- int startIndex = Page.getStartOfPage(pageNo, pageSize);
- List data = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
- return new Page( startIndex, totalCount, pageSize, data);
- }
- /**
- * 分页查询函数
- * @param entityClass
- * @param pageNo
- * @param pageSize
- * @param criterions
- * @return
- */
- public Page pagedQuery(Class<T> entityClass,int pageNo,int pageSize,Criterion...criterions){
- Criteria criteria = createCriteria(entityClass, criterions);
- return pagedQuery(criteria, pageNo, pageSize);
- }
- /**
- * 分页查询带排序
- * @param entityClass
- * @param pageNo
- * @param pageSize
- * @param orderBy
- * @param isAsc
- * @param criterions
- * @return
- */
- public Page pagedQuery(Class<T> entityClass,int pageNo,int pageSize,String orderBy,boolean isAsc,Criterion...criterions){
- Criteria criteria = createCriteria(entityClass, orderBy, isAsc, criterions);
- return pagedQuery(criteria, pageNo, pageSize);
- }
- /**
- * 去除hql的select子句。
- * @param hql
- * @return
- * @see #pagedQuery(String,int,int,Object[])
- */
- private static String removeSelect(String hql){
- Assert.hasText(hql);
- int beginPos = hql.toLowerCase().indexOf("from");
- Assert.isTrue(beginPos!=-1,hql);
- return hql.substring(beginPos);
- }
- /**
- * 去除hql的orderBy子句。
- * @param hql
- * @return
- * @see #pagedQuery(String,int,int,Object[])
- */
- private static String removeOrders(String hql) {
- Assert.hasText(hql);
- Pattern p = Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*", Pattern.CASE_INSENSITIVE);
- Matcher m = p.matcher(hql);
- StringBuffer sb = new StringBuffer();
- while (m.find()) {
- m.appendReplacement(sb, "");
- }
- m.appendTail(sb);
- return sb.toString();
- }
- }
package com.hb.generic.dao; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.CriteriaSpecification; import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projection; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.hibernate.impl.CriteriaImpl; import org.hibernate.impl.CriteriaImpl.OrderEntry; import com.hb.generic.dao.support.Page; import com.hb.generic.dao.utils.Assert; import com.hb.generic.dao.utils.BeanUtils; /** * Dao的基类. * * 提供分页函数和若干便捷查询方法,并对返回值作了泛型类型转换. * @author llying * @company qm */ public abstract class HibernateDaoSupport<T> implements HibernateDaoHandler { private static final Log log = LogFactory.getLog(HibernateDaoSupport.class); public Object execute(HibernateCallback action){ Assert.notNull(action, "Callback object 对象不能为 Null "); Session session = getSession(); Transaction tr = session.beginTransaction(); Object result = action.doInHibernate(session); tr.commit(); session.close(); return result; } /** * 获取全部的对象 * @param <T> * @param entityClass 对象类型 * @return */ @SuppressWarnings("unchecked") public <T>List<T> getAll(final Class<T> entityClass) { return (List<T>)execute(new HibernateCallback(){ public Object doInHibernate(Session session) { Criteria criteria = session.createCriteria(entityClass); return criteria.list(); } }); } /** * 获取全部对象,带排序功能 * @param <T> * @param entityClass 实体对象 * @param orderBy 排序字段 * @param isAsc 升序或降序 * @return */ @SuppressWarnings({ "hiding", "hiding", "unchecked" }) public <T> List <T> getAll(final Class<T> entityClass,final String orderBy,final boolean isAsc){ Assert.hasText(orderBy); return (List<T>) execute(new HibernateCallback(){ public Object doInHibernate(Session session) { if (isAsc) return session.createCriteria(entityClass).addOrder(Order.asc(orderBy)).list(); return session.createCriteria(entityClass).addOrder(Order.desc(orderBy)).list(); } }); } /** * 保存对象 * @param newInstance */ @SuppressWarnings("unused") public void saveOrUpdate(final T newInstance){ execute(new HibernateCallback(){ public Object doInHibernate(Session session) { session.saveOrUpdate(newInstance); return null; } }); } /** * 删除对象 * @param transientObject */ public void remove(final T transientObject) { execute(new HibernateCallback(){ public Object doInHibernate(Session session) { session.delete(transientObject); return null; } }); } /** * * @param entityClass * @param id */ public void removeById(Class<T> entityClass, Serializable id) { remove( get(entityClass, id)); } /** * 根据Id获取对象。 * @param <T> * @param entityClass * @param id 实体Id * @return 实体对象 */ @SuppressWarnings({ "hiding", "unchecked" }) public <T> T get(final Class<T> entityClass,final Serializable id) { return (T) execute(new HibernateCallback(){ public Object doInHibernate(Session session) { return session.get(entityClass, id); } }); } /** * 创建一个Query对象。 * @param hql * @param values * @return */ public Query createQuery(String hql,Object...values){ Assert.hasText(hql); Query query = getSession().createQuery(hql); for(int i = 0;i<values.length;i++){ query.setParameter(i, values[i]); } return query; } /** * 创建Criteria对象。 * @param <T> * @param entityClass * @param criterions * @return */ public <T>Criteria createCriteria(Class<T> entityClass,Criterion...criterions){ Criteria criteria = getSession().createCriteria(entityClass); for(Criterion c:criterions){ criteria.add(c); } return criteria; } /** * 创建Criteria对象,有排序功能。 * @param <T> * @param entityClass * @param orderBy * @param isAsc * @param criterions * @return */ public <T>Criteria createCriteria(Class<T> entityClass,String orderBy,boolean isAsc,Criterion...criterions){ Assert.hasText(orderBy); Criteria criteria = createCriteria(entityClass,criterions); if(isAsc){ criteria.addOrder(Order.asc(orderBy)); }else{ criteria.addOrder(Order.desc(orderBy)); } return criteria; } /** * 根据hql查询 * @param hql * @param values * @return */ public List find(final String hql,final Object...values){ Assert.hasText(hql); return createQuery(hql, values).list(); /* return (List) execute(new HibernateCallback(){ public Object doInHibernate(Session session) { Query query = session.createQuery(hql); for(int i = 0;i<values.length;i++){ query.setParameter(i, values[i]); } return query.list(); } });*/ } /** * 根据属性名和属性值查询. * * @return */ public <T>List<T> findBy(Class<T> entityClass,String propertyName,Object value){ Assert.hasText(propertyName); return createCriteria(entityClass, Restrictions.eq(propertyName, value)).list(); } /** * 根据属性名和属性值查询. 有排序 * @param <T> * @param entityClass * @param propertyName * @param value * @param orderBy * @param isAsc * @return */ public <T>List<T> findBy(Class<T> entityClass,String propertyName,Object value,String orderBy,boolean isAsc){ Assert.hasText(propertyName); Assert.hasText(orderBy); return createCriteria(entityClass, orderBy, isAsc, Restrictions.eq(propertyName, value)).list(); } /** * 根据属性名和属性值 查询 且要求对象唯一. * * @return 符合条件的唯一对象. */ public <T>T findUniqueBy(Class<T> entityClass,String propertyName,Object value){ Assert.hasText(propertyName); return (T)createCriteria(entityClass, Restrictions.eq(propertyName, value)).uniqueResult(); } /** * 分页 通过hql进行 * @param hql * @param pageNo * @param pageSize * @param values * @return */ public Page pagedQuery(String hql,int pageNo,int pageSize,Object...values){ Assert.hasText(hql); Assert.isTrue(pageNo>=1); String countQueryString = "select count(*)" + removeSelect(removeOrders(hql)); System.out.println(countQueryString); List countList = find(countQueryString, values); long totalCount = (Long) countList.get(0); System.out.println(totalCount); if(totalCount<1){ return new Page(); } int startIndex = Page.getStartOfPage(pageNo, pageSize); Query query = createQuery(hql,values); List list = query.setFirstResult(startIndex).setMaxResults(pageSize).list(); return new Page(startIndex,totalCount,pageSize,list); } /** * 分页 通过criteria * @param criteria * @param pageNo * @param pageSize * @return */ public Page pagedQuery(Criteria criteria,int pageNo,int pageSize){ Assert.notNull(criteria); Assert.isTrue(pageNo>=1); CriteriaImpl criteriaImpl = (CriteriaImpl) criteria; //先把Projection和OrderBy条件取出来,清空两者来执行Count操作 Projection projection = criteriaImpl.getProjection(); List<CriteriaImpl.OrderEntry> orderEntitys = null; try { orderEntitys=(List<OrderEntry>) BeanUtils.forceGetProperty(criteriaImpl, "orderEntries"); BeanUtils.forceSetProperty(cr发表评论
-
linux IP固化
2011-07-29 13:07 2077今天遇到将DHCP分配的IP设置成static的方式,故在此记 ... -
读取JAR中的配置文件
2011-07-26 13:46 1444今天在工作中遇到了在启动Web工程的时候读取Jar中的配置文件 ... -
中文化和国际化问题权威解析之三:Java中文问题分析 ,工作遇到的问题总结
2011-07-16 15:29 833转自http://blog.csdn.net/alex1979 ... -
VI Java创建中文虚拟机出现乱码问题
2011-07-13 20:43 2178这两天一直被VI java(vsphere)创建中文虚拟机乱码 ... -
Win7定时关机
2011-07-07 17:53 1018今天由于下班前传输数据完成不了,第一次使用win7的定时关机故 ... -
applet操作本地文件
2011-06-10 16:39 2749参考文章来自http://blog.csdn.net/fhx0 ... -
xen server 获取不到 slave Host的CPU使用率的解决方案
2011-05-16 18:06 1505First, use the xe host-list ... -
(转)UML示例图(转)学习
2011-04-18 15:12 971UML示例图 在Visio里,包和类的关 ... -
XMLBEANS的使用总结
2011-01-14 15:21 1010这几天正好研究schema文件生成javabean,再通过ja ... -
libvirt安装过程
2010-11-02 10:52 1677转载http://www.huomo.cn/developer ...
相关推荐
【标题】"Hibernate泛型Dao"是针对Java开发中的数据持久化框架Hibernate的一个高级应用,主要目的是为了提高代码的复用性和简洁性。在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data ...
至于`Dao经典泛型.doc`文件,可能是更深入的关于Hibernate泛型DAO的文档,可能包含了如何配置Spring、如何处理复杂查询以及如何优化泛型DAO的更多细节。阅读这份文档将进一步提升你对泛型DAO的理解和应用能力。 ...
本篇将详细介绍"Hibernate泛型DAO接口,大部分通用都已包括"这一主题。 首先,让我们看看DAO的概念。DAO是软件设计模式中的一种,它的主要职责是封装对数据源的访问,以提供业务逻辑层与数据存储层之间的解耦。通过...
总结起来,"Spring Hibernate 泛型DAO"的主题涵盖了Spring框架的IoC容器与Hibernate的ORM能力,通过泛型和Criteria查询,我们可以实现更加高效、可复用的DAO层代码。这样的设计使得项目结构更加清晰,减少了代码冗余...
而`Hibernate泛型DAO`则是为了减少代码重复性,提高代码复用性和可维护性的一种设计模式。本文将深入探讨`Hibernate泛型DAO`的实现及其使用方法。 首先,DAO(Data Access Object)模式是一种设计模式,它的主要...
而泛型DAO(Data Access Object)则是基于Hibernate进一步抽象出来的一个设计模式,用于提供更通用的数据操作方法。本文档主要探讨了如何在Spring+Hibernate环境中创建和使用泛型DAO。 首先,我们来看一下泛型DAO...
《Hibernate泛型DAO及使用方法借鉴》 在Java开发中,特别是使用Spring+Hibernate框架时,泛型DAO(Data Access Object)是常见的设计模式,它提供了对数据库操作的一般化接口,以提高代码的重用性和可维护性。本文...
本文将深入探讨一种在SSH(Struts+Spring+Hibernate)框架中广泛应用的经典泛型DAO层实现方式,旨在展示其简洁性、高效性和灵活性。 #### 泛型DAO层:概念与优势 泛型DAO层通过利用Java的泛型机制,提供了一种类型...
本文将深入探讨如何实现一个简单的Hibernate泛型DAO(数据访问对象),以提高代码的可重用性和可维护性。 首先,我们来看`AbstractHibernateGenericDao`类,这是一个抽象类,它通常会包含一些基本的CRUD(创建、...
1. 耦合性低:泛型Dao接口可以与不同的持久层框架集成,例如 Hibernate、JPA 等。 2. 灵活性高:泛型Dao接口可以适应不同的业务需求,例如不同的数据库、不同的数据类型等。 3. 代码重用性高:泛型Dao接口可以在不同...
这尤其适用于那些基于ORM(对象关系映射)框架,如Hibernate或MyBatis的项目,它们提供了与数据库交互的基础设施,我们可以直接在泛型DAO上构建。 在实际应用中,我们可能还需要考虑一些额外的细节,如事务管理、...
6. **泛型Dao**:在Java开发中,泛型Dao(Generic Dao)是一种设计模式,用于减少重复的数据库操作代码。通过定义一个通用的Dao接口,可以实现对不同类型的实体对象进行CRUD操作,提高了代码的复用性和可维护性。...
总结来说,"Struts2+hibernate+spring整合泛型DAO"是一种常见的Java Web开发模式,它利用三大框架的优势,结合泛型设计,提高了代码复用,降低了维护成本,使得开发者能更专注于业务逻辑,而不是基础架构。
泛型DAO模式是基于Java泛型技术的一种设计模式,它在数据访问层提供了一种更为通用且灵活的方式来操作数据库。 传统的DAO模式通常需要为每一种数据实体类创建一个对应的DAO接口和实现类,这样会导致大量重复的代码...
接下来,我们可以使用Hibernate或MyBatis等持久层框架实现这个泛型DAO。以Hibernate为例,一个简单的实现可能如下: ```java public class HibernateGenericDAO, ID extends Serializable> implements GenericDAO, ...
这个压缩包文件的标题"SSH 泛型DAO分页"表明它提供了一个实现SSH框架整合的示例,特别关注了泛型DAO(Data Access Object)以及分页功能。下面将详细介绍SSH框架及其分页和泛型DAO的概念。 1. **Struts2**: Struts2...
BaseHibernateDAO是基于Hibernate框架的一个基类,它封装了常见的数据库操作,如增删查改(CRUD)。通过继承这个基类,开发者可以快速创建自定义的DAO实现,避免重复编写相似的代码。BaseHibernateDAO通常会包含以下...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库,而无需关心底层SQL语句的编写。然而,为了提高代码的复用性和可维护性,通常会设计一个通用DAO...