<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
    主站蜘蛛池模板: 亚洲AV无码精品无码麻豆| 人妻18毛片a级毛片免费看| 特黄aa级毛片免费视频播放| 午夜精品射精入后重之免费观看| 永久免费视频v片www| 亚洲好看的理论片电影| 国产高潮久久免费观看| 日韩亚洲国产二区| 国产精品久久亚洲一区二区| 日韩免费毛片视频| 亚洲AV性色在线观看| 免费黄色网址入口| 91在线免费视频| 亚洲国产精品特色大片观看完整版| 香蕉免费看一区二区三区| 亚洲午夜福利在线观看| 两个人的视频www免费| 国产亚洲精品美女久久久| 久久午夜夜伦鲁鲁片无码免费| 国产亚洲3p无码一区二区| 成人五级毛片免费播放| 亚洲欧美国产日韩av野草社区| 性生交片免费无码看人| 亚洲一卡二卡三卡| a级毛片无码免费真人| 小说区亚洲自拍另类| 国外亚洲成AV人片在线观看| 免费无码黄网站在线看| 亚洲春黄在线观看| 国产成人免费ā片在线观看| 日本特黄特色AAA大片免费| 亚洲AV无码不卡无码| 亚洲国产精品成人一区| 男女一边摸一边做爽的免费视频| 亚洲精品国产日韩| 亚洲国产精品嫩草影院久久| 在线观看AV片永久免费| 亚洲一区免费在线观看| 亚洲最大天堂无码精品区| 亚洲日韩中文字幕日韩在线| 国产成人免费视频|