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

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

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

    paulwong

    SPRING DATA查詢方法

    SPRING DATA的REPOSITORY由于只是一個接口,沒有實現方法的,因此查詢就要結合注釋或方法進行:
    通過解析方法名創建查詢
    通過前面的例子,讀者基本上對解析方法名創建查詢的方式有了一個大致的了解,這也是 Spring Data JPA 吸引開發者的一個很重要的因素。該功能其實并非 Spring Data JPA 首創,而是源自一個開源的 JPA 框架 Hades,該框架的作者 Oliver Gierke 本身又是 Spring Data JPA 項目的 Leader,所以把 Hades 的優勢引入到 Spring Data JPA 也就是順理成章的了。


    框架在進行方法名解析時,會先把方法名多余的前綴截取掉,比如 find、findBy、read、readBy、get、getBy,然后對剩下部分進行解析。并且如果方法的最后一個參數是 Sort 或者 Pageable 類型,也會提取相關的信息,以便按規則進行排序或者分頁查詢。


    在創建查詢時,我們通過在方法名中使用屬性名稱來表達,比如 findByUserAddressZip ()。框架在解析該方法時,首先剔除 findBy,然后對剩下的屬性進行解析,詳細規則如下(此處假設該方法針對的域對象為 AccountInfo 類型):


    先判斷 userAddressZip (根據 POJO 規范,首字母變為小寫,下同)是否為 AccountInfo 的一個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,繼續第二步;


    從右往左截取第一個大寫字母開頭的字符串(此處為 Zip),然后檢查剩下的字符串是否為 AccountInfo 的一個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,則重復第二步,繼續從右往左截取;最后假設 user 為 AccountInfo 的一個屬性;


    接著處理剩下部分( AddressZip ),先判斷 user 所對應的類型是否有 addressZip 屬性,如果有,則表示該方法最終是根據 "AccountInfo.user.addressZip" 的取值進行查詢;否則繼續按照步驟 2 的規則從右往左截取,最終表示根據 "AccountInfo.user.address.zip" 的值進行查詢。


    可能會存在一種特殊情況,比如 AccountInfo 包含一個 user 的屬性,也有一個 userAddress 屬性,此時會存在混淆。讀者可以明確在屬性之間加上 "_" 以顯式表達意圖,比如 "findByUser_AddressZip()" 或者 "findByUserAddress_Zip()"。


    在查詢時,通常需要同時根據多個屬性進行查詢,且查詢的條件也格式各樣(大于某個值、在某個范圍等等),Spring Data JPA 為此提供了一些表達條件查詢的關鍵字,大致如下:


    And --- 等價于 SQL 中的 and 關鍵字,比如 findByUsernameAndPassword(String user, Striang pwd);

    Or --- 等價于 SQL 中的 or 關鍵字,比如 findByUsernameOrAddress(String user, String addr);

    Between --- 等價于 SQL 中的 between 關鍵字,比如 findBySalaryBetween(int max, int min);

    LessThan --- 等價于 SQL 中的 "<",比如 findBySalaryLessThan(int max);

    GreaterThan --- 等價于 SQL 中的">",比如 findBySalaryGreaterThan(int min);

    IsNull --- 等價于 SQL 中的 "is null",比如 findByUsernameIsNull();

    IsNotNull --- 等價于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();

    NotNull --- 與 IsNotNull 等價;

    Like --- 等價于 SQL 中的 "like",比如 findByUsernameLike(String user);

    NotLike --- 等價于 SQL 中的 "not like",比如 findByUsernameNotLike(String user);

    OrderBy --- 等價于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user);

    Not --- 等價于 SQL 中的 "! =",比如 findByUsernameNot(String user);

    In --- 等價于 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的參數可以是 Collection 類型,也可以是數組或者不定長參數;

    NotIn --- 等價于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的參數可以是 Collection 類型,也可以是數組或者不定長參數;


    同時我們也可以自定義自己的方式查詢通過@Query注解 這里可以參考http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/ 這篇文章,注意的是JPA 所以@query里面的內容是HQL 如果是mongodb那么語法就是mongodb的查詢語法 neo4j就是neo4j的查詢語法

    posted on 2013-11-17 11:38 paulwong 閱讀(434) 評論(0)  編輯  收藏 所屬分類: SPRINGMONGODB

    主站蜘蛛池模板: 边摸边吃奶边做爽免费视频99| 亚洲另类自拍丝袜第1页| 亚洲国产精品无码一线岛国| 亚洲av不卡一区二区三区| 亚洲精品视频观看| 亚洲欧美国产欧美色欲| 无码免费又爽又高潮喷水的视频 | 一级女性全黄久久生活片免费| 成人自慰女黄网站免费大全| 69视频免费在线观看| 成人免费视频观看无遮挡| 国产三级免费观看| 亚洲国产精品无码久久久蜜芽| 亚洲婷婷天堂在线综合| 精品韩国亚洲av无码不卡区 | 亚洲AV成人精品日韩一区| 国产免费伦精品一区二区三区| 1000部拍拍拍18勿入免费凤凰福利 | 久久福利青草精品资源站免费| 中文字幕免费在线播放| 免费看片在线观看| 免费大香伊蕉在人线国产| 亚洲av永久无码精品国产精品| 亚洲一级免费毛片| 国产福利在线观看永久免费| 久久久久久精品成人免费图片 | 国产成人午夜精品免费视频| 亚洲国产成人乱码精品女人久久久不卡| 亚洲国产精品成人久久| 亚洲人成人网站18禁| 中文字幕乱码一区二区免费| 成人免费网站在线观看| 亚洲av日韩av不卡在线观看| 国产精品高清视亚洲精品| 中文字幕永久免费视频| 免费看韩国黄a片在线观看| 亚洲人成网站在线播放vr| 亚洲综合无码无在线观看 | 麻豆va在线精品免费播放| 在线免费中文字幕| 在线精品亚洲一区二区三区|