SpringDataJpa——JpaRepository查詢功能
原文連結:http://blog.csdn.net/ming070423/article/details/22086169
1.JpaRepository支援介面規範方法名查詢。意思是如果在介面中定義的查詢方法符合它的命名規則,就可以不用寫實現,目前支援的關鍵字如下。
Keyword | Sample | JPQL snippet |
IsNotNull | findByAgeNotNull | ... where x.age not null |
Like | findByNameLike | ... where x.name like ?1 |
NotLike | findByNameNotLike | ... where x.name not like ?1 |
StartingWith | findByNameStartingWith | ... where x.name like ?1(parameter bound with appended %) |
EndingWith | findByNameEndingWith | ... where x.name like ?1(parameter bound with prepended %) |
Containing | findByNameContaining | ... where x.name like ?1(parameter bound wrapped in %) |
OrderBy | findByAgeOrderByName | ... where x.age = ?1 order by x.name desc |
Not | findByNameNot | ... where x.name <> ?1 |
In | findByAgeIn | ... where x.age in ?1 |
NotIn | findByAgeNotIn | ... where x.age not in ?1 |
True | findByActiveTrue | ... where x.avtive = true |
Flase | findByActiveFalse | ... where x.active = false |
And | findByNameAndAge | ... where x.name = ?1 and x.age = ?2 |
Or | findByNameOrAge | ... where x.name = ?1 or x.age = ?2 |
Between | findBtAgeBetween | ... where x.age between ?1 and ?2 |
LessThan | findByAgeLessThan | ... where x.age < ?1 |
GreaterThan | findByAgeGreaterThan | ... where x.age > ?1 |
After/Before | ... | ... |
IsNull | findByAgeIsNull | ... where x.age is null |
2.JpaRepository相關查詢功能
a.spring Data JPA框架在進行方法名解析時,會先把方法名多餘的字首擷取掉,比如find、findBy、read、readBy、get、getBy,然後對剩下部分進行解析。
b.假如建立如下的查詢:findByUserDepUuid(),框架在解析該方法時,首先剔除
findBy,然後對剩下的屬性進行解析,假設查詢實體為Doc。
1:先判斷userDepUuid (根據POJO 規範,首字母變為小寫)是否為查詢實體的一個
屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,繼續第二步;
2:從右往左擷取第一個大寫字母開頭的字串此處為Uuid),然後檢查剩下的字串是
否為查詢實體的一個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,
則重複第二步,繼續從右往左擷取;最後假設user為查詢實體的一個屬性;
3:接著處理剩下部分(DepUuid),先判斷user 所對應的型別是否有depUuid屬性,如
果有,則表示該方法最終是根據“ Doc.user.depUuid” 的取值進行查詢;否則繼
續按照步驟2 的規則從右往左擷取,最終表示根據“Doc.user.dep.uuid” 的值進
行查詢。
4:可能會存在一種特殊情況,比如Doc包含一個user 的屬性,也有一個userDep 屬
性,此時會存在混淆。可以明確在屬性之間加上"_" 以顯式表達意圖,比如
"findByUser_DepUuid()" 或者"findByUserDep_uuid()"
c.特殊的引數: 還可以直接在方法的引數上加入分頁或排序的引數,比如:
Page<UserModel> findByName(String name, Pageable pageable);
List<UserModel> findByName(String name, Sort sort);d.也可以使用JPA的NamedQueries,方法如下:
e.還可以使用@Query來指定本地查詢,只要設定nativeQuery為true,比如:1:在實體類上使用@NamedQuery,示例如下:
@NamedQuery(name = "UserModel.findByAge",query = "select o from UserModel
o where o.age >= ?1")
2:在自己實現的DAO的Repository接口裡面定義一個同名的方法,示例如下:
public List<UserModel> findByAge(int age);
3:然後就可以使用了,Spring會先找是否有同名的NamedQuery,如果有,那麼就不
會按照介面定義的方法來解析。
@Query(value="select * from tbl_user where name like %?1" ,nativeQuery=true)
public List<UserModel> findByUuidOrAge(String name);注意:當前版本的本地查詢不支援翻頁和動態的排序
f.使用命名化引數,使用@Param即可,比如:
@Query(value="select o from UserModel o where o.name like %:nn")
public List<UserModel> findByUuidOrAge(@Param("nn") String name);g.同樣支援更新類的Query語句,新增@Modifying即可,比如:
@Modifying
@Query(value="update UserModel o set o.name=:newName where o.name like %:nn")
public int findByUuidOrAge(@Param("nn") String name,@Param("newName") String
newName);
注意:
1:方法的返回值應該是int,表示更新語句所影響的行數
2:在呼叫的地方必須加事務,沒有事務不能正常執行f.建立查詢的順序
Spring Data JPA 在為介面建立代理物件時,如果發現同時存在多種上述
情況可用,它該優先採用哪種策略呢?
<jpa:repositories> 提供了query-lookup-strategy 屬性,用以指定查
找的順序。它有如下三個取值:
1:create-if-not-found:如果方法通過@Query指定了查詢語句,則使用該語句實現
查詢;如果沒有,則查詢是否定義了符合條件的命名查詢,如果找到,則使用該
命名查詢;如果兩者都沒有找到,則通過解析方法名字來建立查詢。這是querylookup-
strategy 屬性的預設值
2:create:通過解析方法名字來建立查詢。即使有符合的命名查詢,或者方法通過
@Query指定的查詢語句,都將會被忽略
3:use-declared-query:如果方法通過@Query指定了查詢語句,則使用該語句實現
查詢;如果沒有,則查詢是否定義了符合條件的命名查詢,如果找到,則使用該
命名查詢;如果兩者都沒有找到,則丟擲異常
相關推薦
SpringDataJpa——JpaRepository查詢功能
原文連結:http://blog.csdn.net/ming070423/article/details/22086169 1.JpaRepository支援介面規範方法名查詢。意思是如果在介面中定義的查詢方法符合它的命名規則,就可以不用寫實現,目前支援的關鍵字如下。 K
一步一步學SpringDataJpa——JpaRepository基本功能(Curd)
1.UserService /** * * Copyright: Copyright (c) 2012 Asiainfo-Linkage * * [email protected]:2014-3-25 * @ClassName: UserService.
【SpringBoot學習筆記】SpringBoot_01_SpringData—JpaRepository查詢功能
1.JpaRepository支援介面規範方法名查詢 如果在介面中定義的查詢方法符合它的命名規則,就可以不用寫實現類 2.相關功能查詢 a.Spring Data JPA框架在進行方法名解析時
分頁功能 與 分類查詢功能合並
nat hidden 後臺 item ble fas turn items where 功能的合並 首要的就是要找出兩個功能的共同點。這裏主要是用Response展示數據,通過tsql語句查詢的集合作為數據源,所以這裏將兩個tsql合並,來實現功能的合並。 面板界面代碼:
JavaScript根據Json數據來做的模糊查詢功能
處理 false 通過 開始 方法 this eve fin 香瓜 類似於百度搜索框的模糊查找功能 需要有有已知數據,實現搜索框輸入字符,然後Js進行匹配,然後可以通過鼠標點擊顯示的內容,把內容顯示在搜索框中 當然了,正則只是很簡單的字符匹配,不具備多麽復雜的判斷 <
mysql慢查詢功能詳解
mysql 慢查詢 優化有人的地方就有江湖,數據庫也是,sql優化這個問題,任重道遠,我們總是禁不住有爛sql。怎麽辦呢,還好各大數據庫都有相關爛sql的收集功能,而mysql的慢查詢收集也是異曲同工,配合分析sql的執行計劃,這個優化就有了搞頭了。開啟mysql慢查詢日誌1.查看當前慢查詢設置情況#查看慢查
語音識別完成詩句的查詢功能,iOS AVSpeechSynthesis語音輸出結果的詩歌APP
water 兩個 min 介紹 ech fin com esp log 前言 當前的APP的查詢都是使用手動輸入,不僅效率低,而且查詢的語句的限制比較大,不能夠方便的擴展。 如果能方便的擴展查詢語句,那麽APP的使用就會有很大的靈活性。可以設計各種問句和語句,可以方便的和用
C#實現百度網站收錄和排名查詢功能思路及實例
重構 策略 www protected 交互 得出 完成 def 表達式 一、前言 偶然一次在vs2012默認的項目文件夾裏發現了以前自己做的一個關於SEO的類庫,主要是用來查詢某個網址的收錄次數還有網站的排行數,後來重構了下,今天拿出來寫篇文章,說說自己是如何思考的
Python與數據庫[2] -> 關系對象映射/ORM -> 利用 sqlalchemy 實現關系表查詢功能
none 標準 ica accounts like imp 函數 參數形式 char 利用 sqlalchemy 實現關系表查詢功能 下面的例子將完成一個通過關系表進行查詢的功能,示例中的數據表均在MySQL中建立,建立過程可以使用 SQL 命令或編寫 Python
codeigniter框架使用筆記,查詢功能,搜索功能php版。自己留個記錄
jquer 資源文件 導致 utf-8 base inline fail spa aop 控制器Zhaopin.php <?php session_start(); class Zhaopin extends CI_Controller { publi
查詢功能
clas div 輸入 str delete 循環 int 刪除 tag 1 tag = True 2 while tag: 3 # print(‘請輸入:1\n2\n3\n4\n‘) 4 if tag: 5 print(‘lev
名片管理系統(添加及查詢功能)
python#_*_ conding:utf-8 _*_ #1.打印功能提示 print("="*50) print(" 名片管理系統 V1.0") print(" 1:添加一個新的名片") print(" 2:刪除一個名片") print(" 3:修改一個名片") print(" 4:查詢一個名片")
基於bootstrap selectpicker ,實現select下拉框模糊查詢功能
sele TP 選擇器 art 基於 i++ 同時 html .html 1、html代碼塊 需要引入bootstrap的css js jquery bootstrap.css bootstrap-select.min.css jquery-
學習ASP.NET Core Razor 編程系列九——增加查詢功能
方法的參數 將在 代碼 教程 ali 表示 得到 asp.net context 學習ASP.NET Core Razor 編程系列目錄 學習ASP.NET Core Razor 編程系列一 學習ASP.NET Core Razor 編程系列二—&mdash
分布式網上商城項目-項目查詢功能錯誤
ces price PC fabric default fir 運行 spa isp 1、Jdbc內存泄露問題 1 嚴重: The web application [] registered the JDBC driver [com.alibaba.druid.
SpringDataJPA模糊查詢
語句 拼接 lean list ctc int contain tty spa 遇到的情況:在做短信渠道管理添加時,先要去校驗數據庫中是否有該產線-短信類型-渠道的記錄,如果存在就不添加。 //在庫中是否存在該記錄 private boolean ifExistC
楊澤業:wordpress博客開發技巧之添加快遞查詢功能
width part 是否 講解 lin port 位置 ESS number 前幾天,我說到了給你的博客添加《漢字轉拼音》和《二維碼在線生成》的功能,這兩個功能都是額外增加的,而且是可以增加在任何的網站裏面,今天講的是wordpress博客功能開發,是在wordpress
帶輸入查詢功能匹配下拉框的幾種實現方式
sae idt hwnd 就會 bfd bmgr 使用方法 oaf adt 在Web開發中我們經常需要用戶進行輸入操作,輸入框內我們輸入幾個字,輸入框就會出現下拉提示你可能要輸入的完整信息。下面我總結了幾種常見的方案: 一:EasyUi combobox 組合框 具體使用方
django實現查詢功能
use dia ext bubuko var pull arc settings bsp 1.index首頁顯示 <div class="form-group pull-right" style="float: left"&g
LigerUI真假分頁以及過濾查詢功能
前端時間寫過ligerUI頁面框架顯示JSON資料,最近博友問的最多的問題是ligerUI中過濾條件where屬性的使用以及分頁顯示的問題。 為了答疑同時為了總結,做了相應的測試demo,現在寫出來分享一下。