posts - 495,comments - 227,trackbacks - 0
          +++在映射文件中定義命名查詢
          <class .. >
          </class>
          <query name="findCustomersByName"><![CDATA[
              from Customer c where c.name like :name
          ]]></query>
          語句:Query q=session.getNamedQuery("findCustomersByName");
               q.setString("name",name);
               List result=query.list();
          ++++ HQL Vs QBC 檢索方式

          比較運算
           . 檢索年齡大于18的Customer
               HQL  session.createQuery("from Customer cwhere c.age>18");
               QBC  Criteria criteria=session.createCriteria(Customer.class);
                    criteria.add(Expression.gt("age",18));
          2 . 檢索年齡不等于 18的
              HQL session.createQuery("from Customer c where c.age<>18")
              QBC Criteria criteria =session.createCriteria(Customer.class);
                  criteria.add(Expression.not(Expression.eq("age",new Integer(18))));
          3.  檢索姓名為空的Customer對象
             HQL  session.createQuery("from Customer c where c.name is null");
             QBC  Criteria criteria =session.createCriteria(Customer.class);
                  criteria.add(Expression.isNull("name"));
          4. 檢索不屬于任何客戶的訂單
             HQL  session.createQuery("from Order o where o.customer is null");
             QBC  Criteria criteria =session.createCriteria(Order.class);
                  criteria.add(Expression.isNull("customer"));
          5. HQL  Query q=session.createQuery("from Customer c where lower(c.name)='tom'");
                  Query q=session.createQuery("from Customer c where upper(c.name)='TOM'");
             QBC  Criteria criteria =session.createCriteria(Customer.class);
                  criteria.add(Expression.eq("name","tom").ignoreCase());
          范圍運算
          1. 檢查姓名為 Tom,Mike 或者Jack 的 Customer對象
              HQL session.createQuery("from Customer c where c.name in('Tom','Mike','Jack')");
              QBC Criteria criteria=session.createCriteria(Customer.class);
                   String names[]={"Tom","Mike","Jack"};
                   criteria.add(Expression.in("name",names));
          2. 檢查年齡在 18 到  25之間的Customer對象
             HQL session.createQuery("from Customer c where c.age between 18 and 25");
             QBC Criteria criteria=session.createCriteria(Customer.class);
                 criteria.add(Expression.between("age",new Integer(18),newInteger(25)))
          3. 檢索年齡不在 18到  25之間的Customer對象;
             HQL session.createQuery("from Customer c where c.age not between 18 and 25");
             QBC Criteria criteria=session.createCriteria(Customer.class);
                 criteria.add(Expression.not(Expression.between("age",new Integer(18),newInteger(25))))
          字符串模式匹配
          1. 檢索姓名以 "T"開頭的Customer對象
               HQL  session.createQuery("from Customer cwhere c.name like 'T%'");
               QBC  Criteria criteria=session.createCriteria(Customer.class);
                    criteria.add(Expression.like("name","T%"));
                     %表示  任意個字符
                     _表示  一個字符
                    Or
                   criteria.add(Expression.like("name","T",MatchMode.START));
                MatchMode 類中有:
                                 START    開頭
                                 END      結尾
                                 ANYWHERE 包含
                                 EXACT    精確
          邏輯運算符
            Expression.and(Expression1,Expression2);
            Expression.or(Expression1,Expression2);
            
          連接查詢:::::
          1 . 映射文件中的配置
          lazy="true" 延遲加載
          fetch="select" 迫切加載
          2.
            2.1  迫切左外連接, HQL : from Customer c left join fetch c.orders o where c.name like 'T'");
                             QBC : criteria.setFetchMode("orders",FetchMode.EAGER); 迫切加載
               QBC 只支持 迫切左外連接,與內連接
            2.2  左外連接,    HQL : from Customer c left join c.orders where c.name like 'T%'
                              
            2.3 內連接     HQl :  from Customer c inner join c.orders o where c.name like 'T%'
                    
            
          2.4 迫切內連接 ,  HQL:  from customer c inner join fetch c.orders o where c.name like 'T%'
          2.5 隱式內連接 , HQL :  from customer c where c.homeAddress.provice like '%hai'
          2.6 右外連接  ,   HQL :  from customer right outer join c.orders o where c.name like 'T%'

          報表查詢 :
             select new mypack.CustomerRow(c.id,c.name,o.orderNumber)
             from customer c join c.orders o
             where o.orderNumber like 'T%'

             distinct 關鍵字 消除重復關鍵字
             order by  asc||desc 排序
             group by 列    分組查詢
          posted on 2011-06-01 21:54 SIMONE 閱讀(940) 評論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 台北市| 商南县| 手游| 云林县| 双流县| 民权县| 嵊泗县| 万全县| 固阳县| 浑源县| 左贡县| 怀远县| 沙坪坝区| 华蓥市| 赤壁市| 高邑县| 娄底市| 高碑店市| 惠州市| 班戈县| 富民县| 道真| 革吉县| 遵义县| 东乡族自治县| 开封市| 鄂州市| 新密市| 嘉兴市| 高碑店市| 宁阳县| 颍上县| 靖江市| 海原县| 聂拉木县| 庄河市| 望谟县| 汪清县| 林周县| 佛坪县| 图们市|