- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DetachedCriteria
DetachedCriteria
Hibernate3的DetachedCriteria支持
2005-07-12 09:55作者:robbin出处:Java视线责任编辑:方舟
Hibernate3支持DetachedCriteria,这是一个非常有意义的特性!我们知道,在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQL语句,进行查询。
针对这种需求,对于分层应用程序来说,Web层需要传递一个查询的条件列表给业务层对象,业务层对象获得这个条件列表之后,然后依次取出条件,构造查询语句。这里的一个难点是条件列表用什么来构造?传统上使用Map,但是这种方式缺陷很大,Map可以传递的信息非常有限,只能传递name和value,无法传递究竟要做怎样的条件运算,究竟是大于,小于,like,还是其它的什么,业务层对象必须确切掌握每条entry的隐含条件。因此一旦隐含条件改变,业务层对象的查询构造算法必须相应修改,但是这种查询条件的改变是隐式约定的,而不是程序代码约束的,因此非常容易出错。
DetachedCriteria可以解决这个问题,即在web层,程序员使用DetachedCriteria来构造查询条件,然后将这个DetachedCriteria作为方法调用参数传递给业务层对象。而业务层对象获得DetachedCriteria之后,可以在session范围内直接构造Criteria,进行查询。就此,查询语句的构造完全被搬离到web层实现,而业务层则只负责完成持久化和查询的封装即可,与查询条件构造完全解耦,非常完美!这恐怕也是以前很多企图在web层代码中构造HQL语句的人想实现的梦想吧!
示例代码片段如下:
web层程序构造查询条件:
java代码:
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class);
detachedCriteria.add(Restrictions.eq(name, department)).createAlias(employees, e).add(Restrictions.gt((e.age), new Integer(20)));
Department和Employee是一对多关联,查询条件为:
名称是“department”开发部门;
createAlias(employees, e):创建别名
部门里面的雇员年龄大于20岁;
业务层对象使用该条件执行查询:
java代码:
detachedCriteria.getExecutableCriteria(session).list();
最大的意义在于,业务层代码是固定不变的,所有查询条件的构造都在web层完成,业务层只负责在session内执行之。这样代码就可放之四海而皆准,都无须修改了。
然而Spring和Hibernate3的DetachedCriteria有不兼容的问题,因此在Spring环境下面使用Hibernate3需要注意:
Spring的HibernateTemplate提供了Hibernate的完美封装,即通过匿名类实现回调,来保证Session的自动资源管理和事务的管理。其中核心方法是:
java代码:
HibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
}
}
回调方法提供了session作为参数,有了session,就可以自由的使用Hibernate API编程了。使用了spring的之后,代码修改如下:
web层代码:
java代码:
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class);
detachedCriteria.createAlias(employees, e).add(Restrictions.eq(name, department)).add(Restrictions.gt((e.age), new Integer(20)));
departmentManager.findByCriteria(detachedCriteria);
构造deta
您可能关注的文档
- 成品住宅室内装饰装修施工合同.doc
- 成品保护监理细则.doc
- 成果要报样稿.doc
- 我国的国债市场.doc
- 操作系统-在线作业D.doc
- 操作系统复习12.doc
- 整流模块通信规约.doc
- 新科鲁兹行车记录仪该如何选购和安装(详细).doc
- 王国保卫战攻略之英雄人物介绍.doc
- 生态遥感.doc
- 2024年03月第一季重庆市秀山县事业单位招聘54人(含医疗岗26人)笔试历年专业考点(难、易错点荟萃)附带答案详解 .docx
- 初中物理公式汇总【人教版】.doc
- 2024年03月第一季重庆市荣昌区事业单位招聘54人(含医疗岗6人)笔试历年专业考点(难、易错点荟萃)附带答案详解 .docx
- 2024必威体育精装版-小学财务管理制度(必威体育精装版9篇) .pdf
- 2025年漳州市人社工商保险服务中心人员招聘笔试考试题库及答案解析.docx
- 2024年03月苏州高新区2024年公共卫生事业单位公开招聘10名专业技术人才笔试历年专业考点(难、易错点荟萃)附带答案详解 .docx
- 广西名校2025届高中毕业班12月模拟考试-生物试卷.docx
- 2024年03月湖南长沙市长沙县卫生健康局及所属事业单位招聘工作人员57人笔试历年专业考点(难、易错点荟萃)附带答案详解 .docx
- 2024年03月苏州高新区公共卫生事业单位2024年公开招聘10名专业技术人才笔试历年专业考点(难、易错点荟萃)附带答案详解 .docx
- 个抗体药物说明书64 kevzara.pdf
文档评论(0)