hibernate dao 教程.doc_第1页
hibernate dao 教程.doc_第2页
hibernate dao 教程.doc_第3页
hibernate dao 教程.doc_第4页
hibernate dao 教程.doc_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

转一个泛型Hibernate DAO实现 文章来源/dingx/archive/2007/08/06/1728287.aspxpackagesgf4web.dao;importjava.io.Serializable;importjava.util.*;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importorg.hibernate.*;importorg.hibernate.criterion.*;importorg.springframework.orm.hibernate3.HibernateCallback;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;importsgf4web.dao.support.PaginationSupport;importsgf4web.util.GenericsUtils;/*/*泛型HibernateDAO类*authorDigitalSonic*/SuppressWarnings(unchecked)publicclassHibernateGenericDaoextendsHibernateDaoSupport.privateClasspojoClass;/*/*初始化DAO,获取POJO类型*/publicHibernateGenericDao()./this.pojoClass=(Class)(ParameterizedType)getClass().getGenericSuperclass().getActualTypeArguments()0;this.pojoClass=GenericsUtils.getSuperClassGenricType(getClass();/*/*获得该DAO对应的POJO类型*/publicClassgetPojoClass().returnthis.pojoClass;/*/*获得该DAO对应的POJO类型名*/publicStringgetPojoClassName().returngetPojoClass().getName();/加载对象/*/*加载所有的对象*/publicListloadAll().return(List)getHibernateTemplate().loadAll(getPojoClass();/*/*根据hql查询*paramvalues可变参数*/publicListfind(Stringhql,Object.values).returngetHibernateTemplate().find(hql,values);/*/*根据条件加载对象*paramcriteriaCriteria实例*/publicListfindByCriteria(finalCriteriacriteria).Listlist=criteria.list();returntransformResults(list);/*/*根据条件加载对象*paramdetachedCriteriaDetachedCriteria实例*/publicListfindByCriteria(finalDetachedCriteriadetachedCriteria).return(List)getHibernateTemplate().execute(newHibernateCallback().publicObjectdoInHibernate(Sessionsession)throwsHibernateException.Criteriacriteria=detachedCriteria.getExecutableCriteria(session);Listlist=criteria.list();returntransformResults(list);,true);/*/*根据给定的实例查找对象*/publicListfindByExample(Tinstance).Listresults=(List)getHibernateTemplate().findByExample(instance);returnresults;/*/*根据ID查找对象*/publicTfindById(IDid).return(T)getHibernateTemplate().get(getPojoClassName(),id);/*/*根据某个具体属性进行查找*/publicListfindByProperty(StringpropertyName,Objectvalue).StringqueryString=from+getPojoClassName()+asmodelwheremodel.+propertyName+=?;return(List)getHibernateTemplate().find(queryString,value);/新建、修改、删除/*/*新建对象实例化*/publicIDsave(TtransientInstance).return(ID)getHibernateTemplate().save(transientInstance);/*/*更新已存在的对象*/publicvoidupdate(TtransientInstance).getHibernateTemplate().update(transientInstance);/*/*删除指定ID的对象*/publicvoiddelete(IDid).Tinstance=findById(id);if(instance!=null)getHibernateTemplate().delete(instance);/*/*删除指定对象*/publicvoiddelete(TpersistentInstance).getHibernateTemplate().delete(persistentInstance);/分页/*/*根据Criteria加载分页,指定页大小和起始位置*/publicPaginationSupportfindPageByCriteria(finalCriteriacriteria,finalintpageSize,finalintstartIndex).inttotalCount=getCountByCriteria(criteria);criteria.setProjection(null);Listitems=criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();items=transformResults(items);PaginationSupportps=newPaginationSupport(items,totalCount,pageSize,startIndex);returnps;/*/*根据Criteria加载分页,默认页大小,从第0条开始*/publicPaginationSupportfindPageByCriteria(finalCriteriacriteria).returnfindPageByCriteria(criteria,PaginationSupport.PAGESIZE,0);/*/*根据Criteria加载分页,默认页大小,从第startIndex条开始*/publicPaginationSupportfindPageByCriteria(finalCriteriacriteria,finalintstartIndex).returnfindPageByCriteria(criteria,PaginationSupport.PAGESIZE,startIndex);/*/*根据Criteria统计总数*/publicintgetCountByCriteria(finalCriteriacriteria).Integercount=(Integer)criteria.setProjection(Projections.rowCount().uniqueResult();Value();/*/*根据DetachedCriteria加载分页,指定页大小和起始位置*/publicPaginationSupportfindPageByCriteria(finalDetachedCriteriadetachedCriteria,finalintpageSize,finalintstartIndex).return(PaginationSupport)getHibernateTemplate().execute(newHibernateCallback().publicObjectdoInHibernate(Sessionsession)throwsHibernateException.Criteriacriteria=detachedCriteria.getExecutableCriteria(session);inttotalCount=(Integer)criteria.setProjection(Projections.rowCount().uniqueResult().intValue();criteria.setProjection(null);Listitems=criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();items=transformResults(items);PaginationSupportps=newPaginationSupport(items,totalCount,pageSize,startIndex);returnps;,true);/*/*根据DetachedCriteria加载分页,默认页大小,从第0条开始*/publicPaginationSupportfindPageByCriteria(finalDetachedCriteriadetachedCriteria).returnfindPageByCriteria(detachedCriteria,PaginationSupport.PAGESIZE,0);/*/*根据DetachedCriteria加载分页,默认页大小,从第startIndex条开始*/publicPaginationSupportfindPageByCriteria(finalDetachedCriteriadetachedCriteria,finalintstartIndex).returnfindPageByCriteria(detachedCriteria,PaginationSupport.PAGESIZE,startIndex);/*/*根据DetachedCriteria统计总数*/publicintgetCountByCriteria(finalDetachedCriteriadetachedCriteria).Integercount=(Integer)getHibernateTemplate().execute(newHibernateCallback().publicObjectdoInHibernate(Sessionsession)throwsHibernateException.Criteriacriteria=detachedCriteria.getExecutableCriteria(session);returncriteria.setProjection(Projections.rowCount().uniqueResult();,true);Value();/*/*根据hql加载分页,指定页大小和起始位置*/publicPaginationSupportfindPageByQuery(finalStringhql,finalintpageSize,finalintstartIndex,Object.values).inttotalCount=getCountByQuery(hql,values);if(totalCount1)returnnewPaginationSupport(newArrayList(0),0);Queryquery=createQuery(hql,values);Listitems=query.setFirstResult(startIndex).setMaxResults(pageSize).list();PaginationSupportps=newPaginationSupport(items,totalCount,pageSize,startIndex);returnps;/*/*根据hql加载分页,默认页大小,从第0条开始*/publicPaginationSupportfindPageByQuery(finalStringhql,Object.values).returnfindPageByQuery(hql,PaginationSupport.PAGESIZE,0,values);/*/*根据hql加载分页,默认页大小,从第startIndex条开始*/publicPaginationSupportfindPageByQuery(finalStringhql,finalintstartIndex,Object.values).returnfindPageByQuery(hql,PaginationSupport.PAGESIZE,startIndex,values);/*/*根据hql统计总数*/publicintgetCountByQuery(finalStringhql,Object.values).StringcountQueryString=selectcount(*)+removeSelect(removeOrders(hql);Listcountlist=getHibernateTemplate().find(countQueryString,values);return(Integer)countlist.get(0);/创建Criteria和Query/*/*创建Criteria对象*paramcriterions可变的Restrictions条件列表*/publicCriteriacreateCriteria(Criterion.criterions).Criteriacriteria=getSession().createCriteria(getPojoClass();for(Criterionc:criterions)criteria.add(c);returncriteria;/*/*创建Criteria对象,带排序字段与升降序字段*/publicCriteriacreateCriteria(StringorderBy,booleanisAsc,Criterion.criterions).Criteriacriteria=createCriteria(criterions);if(isAsc)criteria.addOrder(Order.asc(orderBy);elsecriteria.addOrder(Order.desc(orderBy);returncriteria;/*/*方法取自SpringSide.*创建Query对象.对于需要first,max,fetchsize,cache,cacheRegion等诸多设置的函数,可以在返回Query后自行设置.*留意可以连续设置,如下:*dao.getQuery(hql).setMaxResult(100).setCacheable(true).list();*调用方式如下:*dao.createQuery(hql)*dao.createQuery(hql,arg0);*dao.createQuery(hql,arg0,arg1);*dao.createQuery(hql,newObjectarg0,arg1,arg2)*paramvalues可变参数.*/publicQuerycreateQuery(Stringhql,Object.values).Queryquery=getSession().createQuery(hql);for(inti=0;i0).if(items.get(0)instanceofMap).ArrayListlist=newArrayList(items.size();for(inti=0;iitems.size();i+).Mapmap=(Map)items.get(i);list.add(map.get(CriteriaSpecification.ROOT_ALIAS);returnlist;elseif(items.get(0)instanceofObject).ArrayListlist=newArrayList(items.size();intpos=0;for(inti=0;i(Object)items.get(0).length;i+).if(Object)items.get(0)i.getClass()=getPojoClass().pos=i;break;for(inti=0;iitems.size();i+).list.add(Object)items.get(i)pos);returnlist;elsereturnitems;elsereturnitems;packagesgf4web.util;importjava.lang.reflect.ParameterizedType;importjava.lang.reflect.Type;/*/*泛型参数辅助类*authorDigitalSonic*/SuppressWarnings(unchecked)publicclassGenericsUtils./*/*通过反射,获得定义Class时声明的父类的第一个范型参数的类型。*/publicstaticClassgetSuperClassGenricType(Classclazz).returngetSuperClassGenricType(clazz,0);/*/*通过反射,获得定义Class时声明的父类的范型参数的类型。*如没有找到符合要求的范型参数,则递归向上直到Object。*paramclazz要进行查询的类*paramindex如有多个范型声明该索引从0开始*return在index位置的范型参数的类型,如果无法判断则返回Object.class*/publicstaticClassgetSuperClassGenricType(Classclazz,intindex).booleanflag=true;TypegenType=clazz.getGenericSuperclass();Typeparams=null;if(!(genTypeinstanceofParameterizedType)flag=false;else.params=(ParameterizedType)genType).getActualTypeArguments();if(index=params.length|

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论