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

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

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

    隨筆-13  評論-9  文章-9  trackbacks-0
    Hib的檢索方式
    1'導航對象圖檢索方式。通過已經加載的對象,調用.iterator()方法可以得到order對象
    如果是首次執行此方法,Hib會從數據庫加載關聯的order對象,否則就從緩存中得到。
    2'OID檢索方式。通過session的get,load方法知道了OID的情況下可以使用
    3'HQL檢索方式。使用面向對象的HQL查詢語句session的find方法利用HQL來查詢
    4'QBC檢索方式。利用QBCAPI來檢索它是封裝了基于字符串的查詢語句
    5'本地的SQL檢索方式。使用本地數據庫的SQL查詢語句Hib會負責把檢索到的JDBC結果集映射為持久化對象圖。

    五種檢索方式的使用場合和特點:

    HQL?:?是面向對象的查詢語言,同SQL有些相似是Hib中最常用的方式。
    ???????查詢設定各種查詢條件。
    ???????支持投影查詢,檢索出對象的部分屬性。
    ???????支持分頁查詢,允許使用having和group?by
    ???????提供內制的聚集函數,sum(),min(),max()
    ???????能調用用戶的自定義SQL
    ???????支持子查詢,嵌入式查詢
    ???????支持動態綁定參數
    建議使用Query接口替換session的find方法。
    ???Query?Q?=?session.createQuery("from?customer?as?c?where?c.name?=?:customerName"?+?"and?c.age?=?:customerAge");
    ???query.setString?("customerName"?,?"tom");
    ???query.setInteger("customerAge"?,?"21");
    ???list?result?=?query.list();
    QBC?:??QBCAPI提供了另一種方式,主要是Criteria接口、Criterion接口和Expression類
    ???Criteria?criteria?=?session.createCriteria(customer.class);
    ???Criterion?criterion1?=?Expression.like("name","t%");
    ???Criterion?criterion2?=?Expression.eq("age",new?Integer(21));
    ???Critera?=?criteria.add(criterion1)?;
    ???Critera?=?criteria.add(criterion2)?;
    ???list?result?=?criteria.list();?
    ???或是:?list?result?=?session.createCriteria(Customer.class).add(Expression.eq("this.name","tom")).list();?
    SQL?:??采用HQL和QBC檢索時,Hib生成SQL語句適用所有數據庫。
    ???Query?query??=?session.createSQLQuery("select?{c.*}?from?customers?c?where?c.name?like?:?customername?"?+?"and?c.age?=?:customerage","c",customer.calss);
    ???query.setString("customername","tom");
    ???query.setInteger("customerage","21");
    ???list?result?=?query.list();
    /////////////多態查詢
    ???HQL?:session.createQuery("from?employee");
    ???QBC?:session.createCriteria(employee.class);
    ???HQL?:?session.createQuery("from?hourlyEmployee");
    ???QBC?:?session.createCriteria(hourlyEmployee.class);
    ???下面的HQL查詢語句將檢索出所有的持久化對象:
    ???from?java.lang.Object?;
    ???from?java.io.serializable?;
    ////////////查詢的排序
    ???1'查詢結果按照客戶姓名升序排列:
    ???HQL?:
    ????????Query?query?=?session.createQuery?("from?customer?c?order?by?c.name");
    ???QBC?:
    ????????Criteria?criteria?=?session.createCriteria(customer.class);
    ????????criteria.addOrder(order.asc("name"));
    ???HQL?:
    ????????Query?query?=?session.createQuery?("from?customer?c?order?by?c.name?asc?,?c.age?desc");
    ???QBC?:
    ????????Criteria?criteria?=?session.createCriteria(customer.class);
    ????????criteria.addOrder(order.asc?("name"));
    ????????criteria.addOrder(order.desc("age"));?

    ????????import?net.sf.hibernate.pression.Order
    ????????import?mypack.Order
    ????????...........
    ????????Criteria?criteria?=?session.createCritria?(mypack.Order.class);
    ????????criteria.addOrder(net.sf.hibernate.Order.asc("name"));
    ///////////HQL語句的參數綁定Query接口提供了綁定各種Hib映射類型的方法。
    ????????setBinary()
    ????????setString()
    ????????setBoolean()
    ????????setByte()
    ????????setCalendar()
    ????????setCharacter()
    ????????setDate()
    ????????setDouble()
    ????????setText()
    ????????setTime()
    ????????setTimestamp()
    ????????setEntity()//把參數與一個持久化類的事例綁定lsit?result?=?session.createQuery("from?order?o?where?o.customer?=????????????:customer").setEntity("customer"?,?customer).list?;
    ????????setParameter()//綁定任意類型的參數
    ????????setProperties()//把命名參數與一個對象的屬性值綁定?Query?query?=?session.createQuery("from?customer?c?where?c.name?=:?????name?"?+?"and?c.age?=:age"?);
    ????????Query.setProperties(customer);?

    過濾查詢結果中的重復元素?
    ?????使用Set集合來去除重復元素;或是使用distinct元素
    ?????Iterator?iterator?=?session.createQuery("select?distinct?c.name?from?customer?").list().iterator();
    ?????while(iterator.hasnext()){
    ???????????String?name?=?(String)?it.next()?;
    ?????}
    ///////////使用聚集函數
    count();?記錄的條數
    min();???求最小值
    max();???求最大值
    avg();???求平均值
    sum();???求和
    1'查詢customer中的所有記錄條數
    ???integer?i?=?(Integer)?session.createQuery("select?count(*)?from?customer").uniqueResult();
    只有在確定只有一個對象時候使用uniqueResult();
    2'查詢customer中的所有客戶的平均年齡
    ???integer?i?=?(Integer)?session.createQuery("select?avg(c.age)?from?customer?c?").uniqueResult();
    3'查詢customer中的客戶年齡的最大值、最小值
    一個數組可以看作一個對象
    ???object?[]?i?=?(Integer)?session.createQuery("select?max(c.age),min(c.age)?from?customer?c?").uniqueResult();
    ???Integer?Maxage?=?(Integer)?i?[0];
    ???Integer?Minage?=?(Integer)?i?[1];
    4'統計customer中的客戶的名稱數目,忽略重復的姓名
    ???Integer?cout?=?(Integer)?session.createQuery("select?count(distinct?c.name)?from?customer?c").uniqueResult();
    ////////////使用分組查詢
    1'按姓名分組,統計customer中的相同姓名的記錄數目
    ???Iterator?iterator?=?(Integer)?session.createQuery("select?c.name?,count(c)?from?customer?c?group?by?c.name").list.iterator();
    ???while(iterator.hasnext()){
    ?????????object[]?p?=?(objcet[])iterator.next();
    ?????????String?name?=?p[0];
    ?????????Integer?cout?=?p[1];
    ???}
    2'按客戶分組,統計每個客戶的訂單數量
    ???Iterator?iterator?=?session.crateQuery("select?c.id?,c.name?,?count(o)?from?customer?c?join?c.order?o?group?by?c.id?").list().iterator;
    ???while(iterator.hasnext()){
    ?????????object[]?p?=?(objcet[])iterator.next();
    ?????????Integer?id?=?p[0]
    ?????????String?name?=?p[1];
    ?????????Integer?cout?=?p[2];
    ???}
    3'統計每個客戶的訂單總價
    ???Iterator?iterator?=?session.crateQuery("select?c.id?,c.name,sum(o.price)?from?customer?c?join?c.order?o?group?by?c.id").list.iterator();
    ???while(iterator.hasnext()){
    ?????????object[]?p?=?(objcet[])iterator.next();
    ?????????Integer?id?=?p[0]
    ?????????String?name?=?p[1];
    ?????????Double?cout?=?p[2];
    ???}
    //////////報表的優化
    使用HQL時如果只查詢對象的一部分屬性不會返回持久化對象
    from?customer?c?join?c.order?o?group?by?c.age;//返回持久化對象,占用緩存。

    select?c.id?,?c.name?,?c.age?,o.id?,o.price?from?customer?c?join?c.order?o?group?by?c.age?//返回關系性數據,不占用session的緩存,可以為JVM回收

    /////////HQL子查詢的集合函數屬性
    size()?返回集合中元素的數目
    minIndex()?建立索引的集合獲得最小的索引
    maxIndex()?建立索引的集合獲得最大的索引
    minElement()?對于包含基本元素的集合獲得集合最小的元素
    maxElement()?對于包含基本元素的集合獲得集合最大的元素
    element()?獲得集合中的所有元素
    ///////////Hibernate的緩存管理
    管理一級緩存,不建議使用下列方法來管理一級緩存
    evict(Object?o)從緩存中清除參數指定的持久化對象
    clear()清空緩存中所有的持久化對象
    ///////////批量更新和批量刪除
    批量更新customer表中的年齡大于零的所有記錄的AGE字段:
    ????tx?=?session.beginTransaction();
    ????Iterator?customer?=?session.find("from?customer?c?where?c.age?>?0").iterator();
    ????while(iterator.hasnext()){
    ????????customer?customer?=?(customer)?customer.next();
    ????????customer.setAge(customer.getAge()+1);
    ????}
    ????tx.commit();
    ????session.close();//上述代碼對數據庫操作效果不好可以使用下列的JDBCAPI直連
    ???
    ????tx?=?session.beginTranscation();
    ????Connection?conn?=?session.connection();
    ????Preparedstatement?ps?=?conn.preparedstatment("update?customer?set?age?=?age?+?1?where?age?>?0?");
    ????ps.executeupdate();
    ????tx.commit();
    posted on 2006-06-19 14:56 Dragonofson 閱讀(7309) 評論(0)  編輯  收藏 所屬分類: Hiberbate

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费国产黄网站在线观看动图| 日韩亚洲国产综合高清| 免费国产在线精品一区| 亚洲高清无码专区视频| 粉色视频免费入口| 亚洲国产午夜福利在线播放| 日本特黄特色AAA大片免费| 亚洲国产成人精品久久久国产成人一区二区三区综| 亚洲日韩精品国产一区二区三区 | 亚洲精品无码永久在线观看男男| 在线免费不卡视频| 看Aⅴ免费毛片手机播放| 亚洲成a人一区二区三区| 国产成人无码免费看片软件| 亚洲高清专区日韩精品| 免费播放一区二区三区| 亚洲一区二区免费视频| 在线观看视频免费国语| 免费国产在线精品一区| 亚洲AV福利天堂一区二区三| 在线看无码的免费网站| 亚洲欧美成人一区二区三区| 国产色爽女小说免费看| 中文成人久久久久影院免费观看| 久久亚洲精精品中文字幕| 91免费精品国自产拍在线不卡| 亚洲AV无码精品国产成人| 国产亚洲精品自在线观看| 84pao国产成视频免费播放| 国产成人精品日本亚洲网址 | 一本久久A久久免费精品不卡| 国产亚洲精品a在线观看| 久久国产精品2020免费m3u8| 亚洲一区二区三区久久| 国产免费av片在线无码免费看| 中文字幕免费观看视频| 亚洲国产综合自在线另类| 全亚洲最新黄色特级网站| 无码av免费网站| 国产成人亚洲综合在线| 亚洲va在线va天堂va不卡下载 |