Hibernate對集合排序
Hibernate對集合中的元素支援兩種排序方式:
Ø 在資料庫中排序:簡稱為資料庫排序,當Hibernate通過select語句到資料庫中檢索集合物件時,利用order by子句進行排序。
Ø 在記憶體中排序:簡稱為記憶體排序,當Hibernate把資料庫中的集合資料載入到記憶體中的Java集合中後,利用Java集合的排序功能進行排序,可以選擇自然排序或者客戶化排序兩種方式。
在對映檔案中,Hibernate用sort屬性來設定記憶體排序,用order-by屬性來設定資料庫排序,表14-2顯示了<set>、<idbag>、<list>和<map>元素的排序屬性。
表14-2 <set>、<idbag>、<list>和<map>元素的排序屬性
排 序 屬 性
[img]http://dl.iteye.com/upload/attachment/463794/4bc0660f-4a17-3c29-b4e4-15de7cde08de.png[/img]
從表14-2看出,<set>和<map>元素支援記憶體排序和資料庫排序,<list>元素不支援任何排序方式,而<idbag>僅支援資料庫排序。
14.5.1 在資料庫中對集合排序
<set>、<idbag>和<map>元素都具有order-by屬性,如果設定了該屬性,當Hibernate通過select語句到資料庫中檢索集合物件時,利用order by子句進行排序。
下面對本章14.1節的Customer.hbm.xml檔案中的<set>元素增加一個order-by屬性:
以上程式碼表明對images集合中的元素進行升序排列,當Hibernate載入Customer物件的images集合時,執行的select語句為:
select CUSTOMER_ID,FILENAME from IMAGES
where CUSTOMER_ID=1 order by FILENAME;
在DOS命令列下進入chapter14根目錄,然後輸入命令:
ant -file build1.xml run
就會執行BusinessService類。BusinessService的main()方法呼叫test()方法,它的輸出結果如下:
org.hibernate.collection.PersistentSet
Tom image1.jpg
Tom image2.jpg
Tom image4.jpg
Tom image5.jpg
在order-by屬性中還可以加入SQL函式,例如:
<set name="images" table="IMAGES" lazy="true"
order-by="lower(FILENAME) desc">
<key column="CUSTOMER_ID" />
<element column="FILENAME" type="string" not-null="true"/>
</set>
當Hibernate載入Customer物件的images集合時,執行的select語句為:
select CUSTOMER_ID,FILENAME from IMAGES
where CUSTOMER_ID=1 order by lower(FILENAME) desc;
在<map>元素中也可以加入order-by屬性,以下程式碼表明對Map型別的images集合中的鍵物件進行排序:
以下程式碼表明對Map型別的images集合中的值物件進行排序:
<map name="images" table="IMAGES" lazy="true" order-by="FILENAME">
<key column="CUSTOMER_ID" />
<map-key column="IMAGE_NAME" type="string"/>
<element column="FILENAME" type="string" not-null="true"/>
</map>
在<idbag>元素中也可以加入order-by屬性,以下程式碼表明按照IMAGES表中的ID代理主鍵排序:
<idbag name="images" table="IMAGES" lazy="true" order-by="ID">
<collection-id type="long" column="ID">
<generator class="increment"/>
</collection-id>
<key column="CUSTOMER_ID" />
<element column="FILENAME" type="string" not-null="true"/>
</idbag>
http://book.csdn.net/bookfiles/1264/100126437749.shtml
Ø 在資料庫中排序:簡稱為資料庫排序,當Hibernate通過select語句到資料庫中檢索集合物件時,利用order by子句進行排序。
Ø 在記憶體中排序:簡稱為記憶體排序,當Hibernate把資料庫中的集合資料載入到記憶體中的Java集合中後,利用Java集合的排序功能進行排序,可以選擇自然排序或者客戶化排序兩種方式。
在對映檔案中,Hibernate用sort屬性來設定記憶體排序,用order-by屬性來設定資料庫排序,表14-2顯示了<set>、<idbag>、<list>和<map>元素的排序屬性。
表14-2 <set>、<idbag>、<list>和<map>元素的排序屬性
排 序 屬 性
[img]http://dl.iteye.com/upload/attachment/463794/4bc0660f-4a17-3c29-b4e4-15de7cde08de.png[/img]
從表14-2看出,<set>和<map>元素支援記憶體排序和資料庫排序,<list>元素不支援任何排序方式,而<idbag>僅支援資料庫排序。
14.5.1 在資料庫中對集合排序
<set>、<idbag>和<map>元素都具有order-by屬性,如果設定了該屬性,當Hibernate通過select語句到資料庫中檢索集合物件時,利用order by子句進行排序。
下面對本章14.1節的Customer.hbm.xml檔案中的<set>元素增加一個order-by屬性:
<set name="images" table="IMAGES" lazy="true" order-by="FILENAME asc">
<key column="CUSTOMER_ID" />
<element column="FILENAME" type="string" not-null="true"/>
</set>
以上程式碼表明對images集合中的元素進行升序排列,當Hibernate載入Customer物件的images集合時,執行的select語句為:
select CUSTOMER_ID,FILENAME from IMAGES
where CUSTOMER_ID=1 order by FILENAME;
在DOS命令列下進入chapter14根目錄,然後輸入命令:
ant -file build1.xml run
就會執行BusinessService類。BusinessService的main()方法呼叫test()方法,它的輸出結果如下:
org.hibernate.collection.PersistentSet
Tom image1.jpg
Tom image2.jpg
Tom image4.jpg
Tom image5.jpg
在order-by屬性中還可以加入SQL函式,例如:
<set name="images" table="IMAGES" lazy="true"
order-by="lower(FILENAME) desc">
<key column="CUSTOMER_ID" />
<element column="FILENAME" type="string" not-null="true"/>
</set>
當Hibernate載入Customer物件的images集合時,執行的select語句為:
select CUSTOMER_ID,FILENAME from IMAGES
where CUSTOMER_ID=1 order by lower(FILENAME) desc;
在<map>元素中也可以加入order-by屬性,以下程式碼表明對Map型別的images集合中的鍵物件進行排序:
<map name="images" table="IMAGES" lazy="true" order-by="IMAGE_NAME">
<key column="CUSTOMER_ID" />
<map-key column="IMAGE_NAME" type="string"/>
<element column="FILENAME" type="string" not-null="true"/>
</map>
以下程式碼表明對Map型別的images集合中的值物件進行排序:
<map name="images" table="IMAGES" lazy="true" order-by="FILENAME">
<key column="CUSTOMER_ID" />
<map-key column="IMAGE_NAME" type="string"/>
<element column="FILENAME" type="string" not-null="true"/>
</map>
在<idbag>元素中也可以加入order-by屬性,以下程式碼表明按照IMAGES表中的ID代理主鍵排序:
<idbag name="images" table="IMAGES" lazy="true" order-by="ID">
<collection-id type="long" column="ID">
<generator class="increment"/>
</collection-id>
<key column="CUSTOMER_ID" />
<element column="FILENAME" type="string" not-null="true"/>
</idbag>
http://book.csdn.net/bookfiles/1264/100126437749.shtml
相關文章
- 對list集合中的物件進行排序(轉載)物件排序
- 在Java中對集合當中的物件進行排序Java物件排序
- 排序演算法集合排序演算法
- struts + hibernate 資料集合如何顯示
- Java集合中的排序方法Java排序
- java集合物件排序總結Java物件排序
- hibernate(五) hibernate一對一關係對映詳解
- hibernate 元件對映元件
- Java 集合排序策略介面 ComparatorJava排序
- 使用TreeSet構造排序的集合排序
- 集合框架-ArrayList集合儲存自定義物件的排序案例框架物件排序
- Hibernate多對多示例
- 集合框架-模擬鬥地主洗牌和發牌並對牌進行排序案例框架排序
- Map集合的按時間排序方法排序
- hibernate(三) 一對多對映關係
- Numpy 排序搜尋計數與集合操作排序
- Hibernate--繼承對映繼承
- MySQL 對字串排序MySql字串排序
- list集合按元素的某一屬性排序排序
- Java 集合中的排序演算法淺析Java排序演算法
- Java集合和陣列的排序方式總結Java陣列排序
- Hibernate【對映】知識要點
- hibernate(四) 雙向多對多對映關係
- Hibernate對映檔案一對多關係薦
- java排序方式對比Java排序
- 對字典進行排序排序
- C# 泛型集合的自定義型別排序C#泛型型別排序
- task5 排序搜尋計數及集合操作排序
- Hibernate--單表對映總結
- Hibernate 的關聯關係對映
- hibernate 繼承對映關係( JOINED)繼承
- hibernate對映合成模式的問題模式
- spring中對hibernate的支援(轉)Spring
- 學習Hibernate原始碼二_Hibernate物件對映檔案hbm學習原始碼物件
- 利用kvo對集合進行操作
- 沒有人比我更會使用集合!對, 是dart中的集合Dart
- 排序演算法對比排序演算法
- Java 對映 自定義排序Java排序