91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring?JPA之find拓展方法有哪些

發布時間:2023-04-26 15:54:42 來源:億速云 閱讀:129 作者:iii 欄目:開發技術

這篇文章主要介紹“Spring JPA之find拓展方法有哪些”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Spring JPA之find拓展方法有哪些”文章能幫助大家解決問題。

一、單條件查詢

類似 select * from * where 條件 的查詢

1、精確查詢(確定值,例如:=、is)

Dao 層(因為已經不是自帶方法了,所以需要在Dao添加接口)

User findByName(String name);

控制臺打印如下:

Hibernate: 
    select
        user0_.id as id1_0_,
        user0_.age as age2_0_,
        user0_.name as name3_0_ 
    from
        user user0_ 
    where
        user0_.name=?

2、范圍查詢(一定范圍,例如<、<=、>、>=、in、between)

a)運算符

Dao 層

/**
 * 小于age的數據
 * @param age
 * @return
 */
List<User> findByAgeLessThan(int age);
/**
 * 小于等于age的數據
 * @param age
 * @return
 */
List<User> findByAgeLessThanEqual(int age);

控制臺打印如下:

Hibernate: 
    select
        user0_.id as id1_0_,
        user0_.age as age2_0_,
        user0_.name as name3_0_ 
    from
        user user0_ 
    where
        user0_.age<?
Hibernate: 
    select
        user0_.id as id1_0_,
        user0_.age as age2_0_,
        user0_.name as name3_0_ 
    from
        user user0_ 
    where
        user0_.age<=?

其他的“>”就是findByAgeGreaterThan,“>=”就是findByAgeGreaterThanEqual 等等

b)between

Dao 層

/**
 * age在ageLeft和ageRight之間的數據
 * @param ageLeft
 * @param ageRight
 * @return
 */
List&lt;User&gt; findByAgeBetween(int ageLeft,int ageRight);

控制臺打印如下:

Hibernate: 
    select
        user0_.id as id1_0_,
        user0_.age as age2_0_,
        user0_.name as name3_0_ 
    from
        user user0_ 
    where
        user0_.age between ? and ?
c)in

Dao 層

/**java
 * age在ints內的數據
 * @param ages
 * @return
 */
List<User> findByAgeIn(int[] ages);

控制臺打印如下:

Hibernate: 
    select
        user0_.id as id1_0_,
        user0_.age as age2_0_,
        user0_.name as name3_0_ 
    from
        user user0_ 
    where
        user0_.age in (
            ? , ?
        )

findByAgeNotIn的查詢跟in結果是相對的,但是用法是一樣的,傳入的參數也是數組

3、模糊查詢

模糊查詢無非就是 like 語句,這里我們就不詳細討論 like 如何使用了,只介紹一下 JPA 中的 like 如何去實現。
以下是Dao 層的like實現的各接口:

public List<User> findByNameLike(String name){
    return userDao.findByNameLike(name);
}
public List<User> findByNameStartingWith(String name){
    return userDao.findByNameStartingWith(name);
}
public List<User> findByNameStartsWith(String name){
    return userDao.findByNameStartsWith(name);
}
public List<User> findByNameEndingWith(String name){
    return userDao.findByNameEndingWith(name);
}
public List<User> findByNameContaining(String name){
    return userDao.findByNameContaining(name);
}

上面雖然有5個不同的接口,但是控制臺打印卻是一致的,如下:

Hibernate: 
    select
        user0_.id as id1_0_,
        user0_.age as age2_0_,
        user0_.name as name3_0_ 
    from
        user user0_ 
    where
        user0_.name like ? escape ?

那他們5個具體有啥區別呢?不急,我們詳細看看:

a)findByNameLike

請求url findByNameLike?name=aa,控制臺打印入參如下:

binding parameter [1] as [VARCHAR] - [aa]

從輸入值可以看出,單獨的like你傳什么就將什么放在like后面;如果傳的是純字符,則相當于精確查詢;如果你加上“%”,那就可以進行模糊查詢了:findByNameLike?name=%25aa(url中的“%”轉義為“%25”),控制臺打印入參如下:

binding parameter [1] as [VARCHAR] - [%aa]
b)findByNameStartingWith

請求urlfindByNameStartingWith?name=aa,控制臺打印入參如下:

binding parameter [1] as [VARCHAR] - [aa%]

從輸入值來看,這個就是獲取以“aa”開頭的所有數據,其實從名字也可以看出來他的實際作用。后面的findByNameStartsWith跟這個的作用是一樣的。
以此類推:
findByNameEndingWith(aa)findByNameEndsWith(aa): 輸入值應為 [%aa],就是獲取以“aa”為結尾的所有數據;
findByNameContaining(aa):輸入值應為 [%aa%]\,就是獲取任意位置包含“aa”的數據。

二、多條件查詢

類似select* from * where 條件1 and 條件2Dao 層

User findByNameAndAge(String name, int age);

控制臺打印如下:

Hibernate: 
    select
        user0_.id as id1_0_,
        user0_.age as age2_0_,
        user0_.name as name3_0_ 
    from
        user user0_ 
    where
        user0_.name=? 
        and user0_.age=?

多條件查詢其實就是多個單條件查詢所疊加的效果;主要使用 and 來表示同時滿足多個條件的結果,而 or 用于表示滿足其中一個條件的結果。

三、關鍵字

以下是整理的JPA支持的關鍵字,大家可以自行取之。

關鍵字示例JPQL片段
AndfindByNameAndAge... where x.name = ?1 and x.age = ?2
OrfindByNameOrAge... where x.name = ?1 or x.age = ?2
Is,EqualsfindByName,findByNameIs,findByNameEquals... where x.name = ?1
BetweenfindByAgeBetween... where x.age between ?1 and ?2
LessThanfindByAgeLessThan... where x.age < ?1
LessThanEqualfindByAgeLessThanEqual... where x.age <= ?1
GreaterThanfindByAgeGreaterThan... where x.age > ?1
GreaterThanEqualfindByAgeGreaterThanEqual... where x.age >= ?1
AfterfindByAgeAfter... where x.age > ?1
BeforefindByAgeBefore... where x.age< ?1
IsNullfindByAgeIsNull... where x.age is null
IsNotNull,NotNullfindByAge(Is)NotNull... where x.age not null
LikefindByNameLike... where x.name like ?1
NotLikefindByNameNotLike... where x.name not like ?1
StartingWithfindByNameStartingWith... where x.name like ?1 (參數會綁定到%后面)
EndingWithfindByNameEndingWith... where x.name like ?1 (參數會綁定在%前面)
ContainingfindByNameContaining... where x.name like ?1 (參數會綁定在兩個%中間)
OrderByfindByAgeOrderByNameDesc... where x.age = ?1 order by name desc
NotfindByNameNot... where x.name <> ?1
InfindByAgeIn(Collection ages)... where x.age in ?1
NotInfindByAgeNotIn(Connection ages)... where x.age not in ?1
TruefindByActiveTrue()... where x.active = true
FlasefindByActiveFalse()... where x.active = false
IgnoreCasefindByNameIgnoreCase... where UPPER(x.name) = UPPER(?1)

關于“Spring JPA之find拓展方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蓬莱市| 杭州市| 丁青县| 南郑县| 台州市| 崇仁县| 旬邑县| 银川市| 万州区| 阿坝县| 海南省| 营山县| 株洲县| 三门峡市| 遂平县| 鄂托克前旗| 郓城县| 绥中县| 健康| 三门峡市| 桐城市| 安国市| 东明县| 鄂尔多斯市| 遵义县| 吴忠市| 呼和浩特市| 神木县| 九龙城区| 彰武县| 安仁县| 比如县| 班玛县| 阿瓦提县| 正镶白旗| 桂阳县| 湖口县| 湘潭县| 肥西县| 萝北县| 古浪县|