zoukankan      html  css  js  c++  java
  • Hibernate入门(十二)离线条件检索

    Hibernate——离线条件检索DetachedCriteria

    DetachedCriteria翻译为离线条件查询,因为它是可以脱离Session来使用的一种条件查询对象,我们都知道Criteria对象吧必须由Session

    对象来创建。那么就是说必须先有Session才可以生成Criteria对象。而DetachedCriteria对象可以在其他层对条件进行封装。

      这个对象也是比较有用的,尤其在SSH整合以后这个对象会经常使用。它的主要优点是做一些特别复杂的条件查询的时候,

    往往会在WEB层向业务层传递很多的参数,业务层又会将这些参数传递给DAO层。最后在DAO中拼接SQL完成查询。有了离线条件查询对象后,

    那么这些工作都可以不用关心了,我们可以在WEB层将数据封装好,传递到业务层,再由业务层传递给DAO完成查询。

      简单的说就是:封装条件的对象criteria,必须现有session,而session是在DAO生成的,那么就意味着,web层到service层再到DAO层,中间传递的都是条件字符串,然后再对应封装条件。这样很麻烦,不如在web层开始就把条件封装好,然后传递条件就是了,最后到了DAO层让这个条件对象绑定当前session就OK。这就是离线条件查询,DetachedCriteria。

    /**
         * 离线条件检索Demo
         */
        @Test
        public void fun(){
            DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Employee.class);
            detachedCriteria.add(Restrictions.idEq(1002127));
            
            Session session = HibernateUtils.getSession();
            Transaction tx = session.beginTransaction();
            
            //离线条件查询对象与session对象绑定
            List<Employee> employees = detachedCriteria.getExecutableCriteria(session).list();
            
            
            for(Employee emp : employees){
                System.out.println(emp);
            }
    
            tx.commit();
            session.close();
        }

     Hibernate:
        select
            this_.eid as eid1_2_0_,
            this_.ename as ename2_2_0_,
            this_.egender as egender3_2_0_,
            this_.ephone as ephone4_2_0_
        from
            employee this_
        where
            this_.eid = ?
    Hibernate:
        select
            roles0_.r_eid as r_eid2_1_0_,
            roles0_.r_rtype as r_rtype1_1_0_,
            role1_.rtype as rtype1_4_1_,
            role1_.rname as rname2_4_1_
        from
            emp_role roles0_
        inner join
            role role1_
                on roles0_.r_rtype=role1_.rtype
        where
            roles0_.r_eid=?
    Employee [eid=1002127, ename=刘欢, egender=男, ephone=15497863155, roles=[deep.domain.Role@70925b45, deep.domain.Role@3deb2326]]

  • 相关阅读:
    JavaScript
    并发编程基础
    基于 TCP & UDP 协议的 socket 通信
    struct 模块 & subprocess 模块
    Python中的异常处理
    网络编程基础
    Json 模块补充
    冒泡排序
    OOP 反射 & 元类
    OOP 内置函数
  • 原文地址:https://www.cnblogs.com/deepSleeping/p/10012188.html
Copyright © 2011-2022 走看看