这里介绍Hibernate DetachedCriteria,这是一个非常有意义的特性!我们知道,在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQL语句,进行查询。

本文向咱们介绍Hibernate DetachedCriteria,或许好多人还不了解,没有关系,看完本文你必定有不少收成,期望本文能教会你更多东西。

Hibernate DetachedCriteria学习经历  DetachedCr 第1张

Hibernate DetachedCriteria,这是一个十分有含义的特性!咱们知道,在惯例的Web编程中,有许多的动态条件查询,即用户在网页上面自在挑选某些条件,程序依据用户的挑选条件,动态生成SQL句子,进行查询。

针对这种需求,关于分层应用程序来说,Web层需求传递一个查询的条件列表给业务层目标,业务层目标取得这个条件列表之后,然后顺次取出条件,结构查询句子。这儿的一个难点是条件列表用什么来结构?传统上运用Map,可是这种办法缺点很大,Map能够传递的信息十分有限,只能传递name和value,无法传递终究要做怎样的条件运算,终究是大于,小于,like,仍是其它的什么,业务层目标有必要切当把握每条entry的隐含条件。因而一旦隐含条件改动,业务层目标的查询结构算法有必要相应修正,可是这种查询条件的改动是隐式约好的,而不是程序代码束缚的,因而十分简略犯错。

DetachedCriteria能够处理这个问题,即在web层,程序员运用DetachedCriteria来结构查询条件,然后将这个DetachedCriteria作为办法调用参数传递给业务层目标。而业务层目标取得DetachedCriteria之后,能够在session范围内直接结构Criteria,进行查询。就此,查询句子的结构彻底被搬离到web层完结,而业务层则只担任完结耐久化和查询的封装即可,与查询条件结构彻底解耦,十分***!这恐怕也是曾经许多妄图在web层代码中结构HQL句子的人想完结的愿望吧!

示例代码片段如下:

  1. DetachedCriteriadetachedCriteria=DetachedCriteria.forClass(Department.class);
  2. detachedCriteria.add(Restrictions.eq("name","department")).
    createAlias("employees","e").add(Restrictions.gt(("e.age"),newInteger(20)));

Department和Employee是一对多相关,查询条件为:名称是“department”开发部分;部分里边的雇员年纪大于20岁;

业务层目标运用该条件履行查询:

  1. detachedCriteria.getExecutableCriteria(session).list();

***的含义在于,业务层代码是固定不变的,一切查询条件的结构都在web层完结,业务层只担任在session内履行之。这样代码就可放之四海而皆准,都无须修正了。但是Spring和Hibernate DetachedCriteria有不兼容的问题,因而在Spring环境下面运用Hibernate3需求留意:

Spring的HibernateTemplate供给了Hibernate的***封装,即经过匿名类完结回调,来确保Session的主动资源办理和业务的办理。其间中心办法是:

  1. HibernateTemplate.execute(newHibernateCallback(){
  2. publicObjectdoInHibernate(Sessionsession)throwsHibernateException{
  3. ....
  4. }
  5. }

回调办法供给了session作为参数,有了session,就能够自在的运用Hibernate API编程了。运用了spring的之后,代码修正如下:

  1. DetachedCriteriadetachedCriteria=DetachedCriteria.forClass(Department.class);
  2. detachedCriteria.createAlias("employees","e").
    add(Restrictions.eq("name","department")).
    add(Restrictions.gt(("e.age"),newInteger(20)));
  3. departmentManager.findByCriteria(detachedCriteria);

【修改引荐】

  1. Hibernate Util简略评论
  2. 详解优化Hibernate功能经历
  3. 概述Hibernate dbcp连接池运用办法
  4. 浅析Hibernate.cfg.xml装备
  5. Hibernate Shard根底剖析
转载请说明出处
知优网 » Hibernate DetachedCriteria学习经历

发表评论

您需要后才能发表评论