




免费预览已结束,剩余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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44851.10-2025道路车辆液化天然气(LNG)燃气系统部件第10部分:不锈钢钢管
- 2024年火电电力职业鉴定考前冲刺练习题含答案详解【突破训练】
- 应急安全培训标语大全课件
- 应急安全培训仿真课件
- 应急处理课件教学
- 秋季腹泻的流行病学特征与高危人群分析
- 呼吸道传染病患者气道管理与护理措施
- 病毒感染与癌症关联机制
- 城镇建设合同(标准版)
- 2024安全监察人员考前冲刺练习题及完整答案详解【必刷】
- 长宏国际安全知识培训课件
- 项目四旅游电子商务网络营销92课件
- 电缆桥架设备知识培训课件
- 快乐的牛仔课件
- 2025年组织部招聘笔试冲刺
- DB3302T1135-2022新建小区室内公共体育设施配置和管理规范
- 2025年装载机行业当前竞争格局与未来发展趋势分析报告
- 学校红领巾网络安全教育广播稿
- 基于4C理论宜宾蜜雪冰城营销策略研究
- 医院院士工作站申报材料
- 如何上好语文课的讲座
评论
0/150
提交评论