自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

擴(kuò)展Hibernate的查詢

開發(fā) 后端
本文講解擴(kuò)展Hibernate的查詢。hibernate-conditions.jar包主要是擴(kuò)展了hibernate的查詢功能,該功能依賴于hibernate及hibernate相關(guān)包.

包名:hibernate-conditions.jar

主要是擴(kuò)展了hibernate的查詢功能,該功能依賴于hibernate及hibernate相關(guān)包.

主要擴(kuò)展了將一個變量注釋成一個查詢條件的功能,把整個對象當(dāng)成一個未知的查詢條件,交給解析器去解析.核心是幾個注釋的使用.下面解釋這幾個注釋.

1. AsCondition 把一個變量注釋成一個條件,該注釋有兩個最主要的字段,propertyName和symbol其中propertyName是指定要查詢的hibernate實體的字段. symbol指明查詢的操作比較符,即"=","< ",">"等操作.還有幾個比較次要的字段:  groupOrdinal 指定分組的序號,如果一個對象有多個查詢條件,可以指定這些條件序號.可以在不要的查詢過程中指定不同的查詢序號.

 ignoreNull 是否忽略null值,默認(rèn)是忽略.如果不忽略null值,則在條件解析過程中遇到該查詢條件的值為空,則將該條件解析為 "propertyName" is null

inherit 是否查詢父類,默認(rèn)是不查詢父類.

2. AsAlias 查詢集合,對應(yīng)Criteria.createAlias()方法.只是里面有一個ignoreEmpty字段不同,該字段指定是否忽略集合為空,如果不忽略集合為空,則當(dāng)該值為null的時候,解析后的查詢條件為:集合 is empty

3. DesignatedProperty 該注釋是用在被注釋的是一個類,并指定該類中的一個屬性作為查詢條件的值.

4. Conversion 用于條件值的數(shù)據(jù)類型的轉(zhuǎn)換.如:被查詢條件值為Integter而被注釋的變量為String,這時候就可以使用該注釋把數(shù)據(jù)類型從String轉(zhuǎn)換為Integter.除了通用類型的數(shù)據(jù)的轉(zhuǎn)換還可以數(shù)據(jù)的類型的轉(zhuǎn)換,把數(shù)據(jù)轉(zhuǎn)換的類型ConversionType指定為Custom,注意,如果該屬性指定為Custom則需要給出customDataConversionType的類型,該類型必須是繼承DataConversion接口.如果沒有指定,則不能進(jìn)行任何的數(shù)據(jù)轉(zhuǎn)換.

Conversion里還有一個屬性throwDataConversionException,該屬性指定如果數(shù)據(jù)轉(zhuǎn)換異常,是否拋出異常,如果拋出異常則當(dāng)次的查詢會終止.如果出現(xiàn)異常但不拋出,則會忽略該查詢條件.

使用也很簡單:

創(chuàng)建一個AnnotationConditionParser對象,調(diào)用該對象的parser(Object...unkownConditionObject)方法可以指定未知道的條件實體,該方法被了接收被注釋過的實體外還可以接收原來hibernate的查詢條件和字符串的查詢條件,如果是字符串的查詢條件必須符合Criteria的查詢格式,否則在hibernate解析時會有查詢的異常.

AnnotationConditionParser對象中的groupLimit(int groupLimit)方法用于限定查詢的分組,如果指定的分組則只解析屬于該組的條件.

具體執(zhí)行對條件的解析操作是createCriteria(DetachedCriteria criteria)方法,該方法把所有的條件解析成DetachedCriteria 的查詢條件.接下來就是對DetachedCriteria 的操作了.由于DetachedCriteria 對象是hibernate的對象,該對象的用法相信大家比我還熟悉. 我在這里就不再解釋了.

具體例子(只作為例子講解,無法直接運(yùn)行):

  1. public class ConditionTest {  
  2. /**  
  3. * @param args  
  4. */ 
  5. public static void main(String[] args) {  
  6. ConditionTest test = new ConditionTest();  
  7. test.setName("my name");  
  8. test.setSize(10);  
  9. OtherClass other1 = new OtherClass();  
  10. other1.setName("name1");  
  11. test.setObjectCondition(other1);  
  12. OtherClass other2 = new OtherClass();  
  13. other2.setName("name1");  
  14. test.setOther(other2);  
  15. DetachedCriteria detachedCriteria = DetachedCriteria.forEntityName("UserEntity");  
  16. new AnnotationConditionParser()  
  17. //限定查詢的分組  
  18. .groupLimit(1)  
  19. //設(shè)置查詢的實體對象  
  20. .parser(test)  
  21. //執(zhí)行查詢并填充DetachedCriteria對象  
  22. .createCriteria(detachedCriteria);  
  23. // ...  
  24. // 執(zhí)行detachedCriteria對象的數(shù)據(jù)查詢操作  
  25. }  
  26. //最簡單的用法  
  27. @AsCondition(propertyName="size")  
  28. private int size;  
  29. @AsCondition(propertyName="name", symbol=Symbol.LIKE)  
  30. private String name;  
  31. //指定對象里的一個屬性作為查詢的條件  
  32. @AsCondition(propertyName="name")  
  33. @DesignatedProperty(propertyName="name")  
  34. private OtherClass objectCondition;  
  35.  
  36. public int getSize() {  
  37. return size;  
  38. }  
  39. public void setSize(int size) {  
  40. this.size = size;  
  41. }  
  42. public String getName() {  
  43. return name;  
  44. }  
  45. public void setName(String name) {  
  46. this.name = name;  
  47. }  
  48. public OtherClass getObjectCondition() {  
  49. return objectCondition;  
  50. }  
  51. public void setObjectCondition(OtherClass objectCondition) {  
  52. this.objectCondition = objectCondition;  
  53. }  
  54. public OtherClass getOther() {  
  55. return other;  
  56. }  
  57. public void setOther(OtherClass other) {  
  58. this.other = other;  
  59. }  
  60. //使用數(shù)據(jù)類型的轉(zhuǎn)換  
  61. @AsCondition(propertyName="datetime", symbol=Symbol.NE, ignoreNull=true)  
  62. @DesignatedProperty(propertyName="name")  
  63. @Conversion(dataConversion=ConversionType.Custom, customDataConversionType=CustomTypeConversion.class)  
  64. private OtherClass other;  
  65.  
  66. public static class OtherClass{  
  67. private String name;  
  68. public String getName() {  
  69. return name;  
  70. }  
  71. public void setName(String name) {  
  72. this.name = name;  
  73. }  
  74. }  
  75. public static class CustomTypeConversion implements DataConversion{  
  76. @Override 
  77. public Object doConversion(Object data) throws DataConversionException {  
  78. return Date.valueOf(data.toString());  
  79. }  
  80.  
  81. }  
  82. }  

【編輯推薦】

  1. Hibernate基礎(chǔ)(2)
  2. Hibernate基礎(chǔ)(1)
  3. 簡單的Hibernate入門介紹
  4. 在Liferay中使用Hibernate
  5. Hibernate模糊查詢參數(shù)化的問題
責(zé)任編輯:book05 來源: csdn
相關(guān)推薦

2009-09-23 09:16:25

Hibernate復(fù)合

2009-09-22 15:26:30

Hibernate多表

2009-06-17 14:17:40

Criteria條件查Hibernate

2009-06-26 10:32:00

QBC查詢Hibernate

2009-09-27 10:19:11

Hibernate命名

2009-09-29 16:29:40

Hibernate查詢

2009-06-18 09:47:50

2009-09-25 11:23:13

Hibernate S

2009-06-17 08:47:00

Hibernate優(yōu)化

2009-09-24 15:27:41

Hibernate查詢

2009-06-18 09:14:08

Hibernate H

2009-09-22 08:39:59

Hibernate F

2009-06-25 16:45:31

Hibernate

2009-09-21 13:42:47

Hibernate查詢

2009-09-24 10:35:10

Hibernate查詢

2009-06-30 16:44:10

Criteria基本查

2009-06-11 14:40:59

Hibernate分頁Hibernate查詢

2009-06-30 16:46:45

Criteria進(jìn)階查

2009-09-25 13:39:40

Hibernate屬性

2009-06-18 13:58:06

Hibernate多表Hibernate
點贊
收藏

51CTO技術(shù)棧公眾號