<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    eric-1001c

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      3 隨筆 :: 45 文章 :: 12 評論 :: 0 Trackbacks
    HQL:
    CreateQuery()
        Query query = session.createQuery("from Customer as c where c.name=:customerName and c.age=:customerAge");
        query.setString("customerName","Tom");
        query.setInteger("customerAge",21);

    createQuery()支持方法鏈編程風格

    QBC:(Criteria,Criterion,Expression)
        Criteria criteria = session.createCriteria(Customer.class);
        Criterion criterion1 = Expression.like("name", "T%");
        Criterion criterion2 = Expression.like("age", new Integer(21));
        Criteria = criteria.add(criterion1).add(criterion2);
        List result = criteria.list();

    HQL&&QBC支持多態和繼承查詢
    HQL&&QBC支持排序和分頁
        HQL: Query query = session.createQuery("from Customer c order by c. name asc, c.age desc"); //排序
                   query.setFirstResult(10);  //設定從對象開始檢索起始位置為0
                                  query.setMaxResults(10); //設定一次最多檢索出的對象數目
        QBC: Criteria criteria = session.createCriteria(Customer.class);
                   criteria.addOrder(Order.asc("name"));
                   criteria.addOrder(Order.desc("age"));
                   criteria.setFirstResult(0); //設定從對象開始檢索起始位置為0
                   criteria.setMaxResult(10); //設定一次最多檢索出的對象數目

    參數綁定能有效避免一些安全漏洞

    HIbernate還能在xml文件里面配置HQL或者SQL本地查詢語句:
        //for HQL
        <hibernate-mapping>
             <class name="mypack.Customer" table="CUSTOMERS">
             ...
                           </class>

                          <query name="findCustomersByName"><![CDATA[from Customer c where c.name like :name]]></query>
                       </hibernate-mapping>
        //for SQL
        <sql-query name="findCustomersByName"><![CDATA[select {c.*} from CUSTOMERS c where c.NAME like :name]]>
            <return alias="c" class="Customer"/>
        </sql-query>
        在程序中使用getNamedQuery()方法獲得查詢語句:
            Query query = session.getNamedQuery("findCustomersByName");
            query.setString("name",name);
            List result = query.list();


    內連接:利用內連接可獲取兩表的公共部分的記錄Select * from A JOIN B ON A.Aid=B.Bnameid


    當查詢的只是對象的部分屬性的時候, 可以采用動態實例化查詢結果,把實體的部分屬性封裝為一個javabean臨時對象,不需要創建對象-關系映射文件
        package mypack;
        import java.io.Serializable;
        public class CustomerRow implements Serializable{
            private Long id;
            private String name;    
            private String orderNumber;
            
            public CustomerRow(Long id, String name, String orderNumber){
                this,id=id;
                ...
            }
            ...
             此處省略id,name和orderNumber屬性的get和set方法
            ...
        }
        在程序中可以結合HQL查詢語句這樣使用,
        Iterator it = session.createQuery("select new mypack.CustomerRow(c.id,c.name,o.orderNumber)'
                +'from Customer c join c,orders o where o,orderNumber like 'T%'").list().iterator();
        此外如果結果集只有一個結果,可以用uniqueResult()方法
        Object[] obj = (Object[])session.createQuery("select max(c.age),min(c.age) from Customer c").uniqueResult();
        Integer maxAge = (Integer) obj[0];
        Integer minAge = (Integer) obj[1];

    結果集中可以通過利用set和sql的distinct去掉

    動態查詢適宜用QBC檢索方式,可以簡化編程:
        public List findCustomers (String name, int age) throws HibernateException{
            Criteria criteria = session,createCriteria(Customer,class);
            if(name != null){
                criteria.add(Expression.like("name",nam.toLowerCase(),MactchMode.ANYWHWERE));    
            }
            if(age!=0){
                crteria.add(Expression.eq("age",new Integer(age)));
            }
            
            return criteria.list();
                
        }

    集合過濾: 當orders集合由于使用延遲檢索策略而沒有在開始被初始化,當調用get***().iterator()方法初始化的時候不能對這個集合進行排序或者條件過濾,通過使

    用集合過濾就能解決這個問題:
        List result = session.createFilter(customer.getOrders(), "where this.price>100 order by this.price")  .list();
    集合過濾除了用于為集合排序或設置約束條件,還可以:
        1) 為集合分頁
        List result = session.createFilter(customer.getOrders(), "order by this,price asc")
            .setFirstResult(10)
            .setMaxResult(50)
            .list();
        2)只選擇集合的某個屬性
        List result = session.createFilter(customer.getOrders(), "select this.orderNumber").list();
    posted on 2008-02-18 16:11 Eric-1001c 閱讀(236) 評論(0)  編輯  收藏 所屬分類: Hibernate
    主站蜘蛛池模板: 国产2021精品视频免费播放| 在线免费观看毛片网站| 亚洲欧洲高清有无| 免费观看毛片视频| 中出五十路免费视频| 亚洲精品在线不卡| 日本免费人成视频播放| 亚洲免费人成在线视频观看 | 亚洲欧美日韩国产精品一区| 又粗又黄又猛又爽大片免费| 99在线在线视频免费视频观看| 亚洲成a人片在线观看天堂无码 | 精品国产污污免费网站aⅴ| 亚洲精品中文字幕| 亚洲av无码成人黄网站在线观看 | 亚洲第一精品在线视频| 国产精品久久免费视频| 久久国产乱子免费精品| 羞羞漫画小舞被黄漫免费| 久久亚洲AV成人无码软件| 亚洲福利精品电影在线观看| 免费三级毛片电影片| 日本一区午夜艳熟免费| 精品无码专区亚洲| 亚洲在成人网在线看| 亚洲国产精品一区第二页| 日本不卡免费新一二三区| 1000部夫妻午夜免费| 中文字幕免费在线看电影大全| 亚洲av无码一区二区三区天堂| 亚洲视频中文字幕在线| 亚洲午夜未满十八勿入网站2| 午夜老司机免费视频| 30岁的女人韩剧免费观看| 中文在线观看免费网站| 黄页网址在线免费观看| 亚洲综合色婷婷在线观看| 亚洲日产2021三区| 无码乱人伦一区二区亚洲| 在线观看午夜亚洲一区| 又粗又大又硬又爽的免费视频|