欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?JPA之find拓展方法示例詳解

 更新時間:2023年04月26日 14:39:05   作者:煙雨戲江南  
這篇文章主要為大家介紹了Spring?JPA之find拓展方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

前兩篇我們詳細(xì)了解了 findByIdfindAll 以及 findAll 的分頁查詢,如果說JPA只有上面的兩種查詢功能,那就太low了,今天讓我們再深入的去探究一下其他查詢方法。

一、單條件查詢

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

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

Dao 層(因為已經(jīng)不是自帶方法了,所以需要在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的數(shù)據(jù)
 * @param age
 * @return
 */
List<User> findByAgeLessThan(int age);
/**
 * 小于等于age的數(shù)據(jù)
 * @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之間的數(shù)據(jù)
 * @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內(nèi)的數(shù)據(jù)
 * @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結(jié)果是相對的,但是用法是一樣的,傳入的參數(shù)也是數(shù)組

3、模糊查詢

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

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個具體有啥區(qū)別呢?不急,我們詳細(xì)看看:

a)findByNameLike

請求url findByNameLike?name=aa,控制臺打印入?yún)⑷缦拢?/p>

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

從輸入值可以看出,單獨的like你傳什么就將什么放在like后面;如果傳的是純字符,則相當(dāng)于精確查詢;如果你加上“%”,那就可以進(jìn)行模糊查詢了:findByNameLike?name=%25aa(url中的“%”轉(zhuǎn)義為“%25”),控制臺打印入?yún)⑷缦拢?/p>

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

b)findByNameStartingWith

請求urlfindByNameStartingWith?name=aa,控制臺打印入?yún)⑷缦拢?/p>

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

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

二、多條件查詢

類似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 來表示同時滿足多個條件的結(jié)果,而 or 用于表示滿足其中一個條件的結(jié)果。

三、關(guān)鍵字

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

關(guān)鍵字示例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 (參數(shù)會綁定到%后面)
EndingWithfindByNameEndingWith... where x.name like ?1 (參數(shù)會綁定在%前面)
ContainingfindByNameContaining... where x.name like ?1 (參數(shù)會綁定在兩個%中間)
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)

最后總結(jié):

以上總結(jié)的這些關(guān)鍵字,大家可以直接用來在Dao層構(gòu)造對應(yīng)接口。其實從關(guān)鍵字的語法來看,基本就已經(jīng)介紹了相關(guān)功能了,所以用起來其實也很方便,更多關(guān)于Spring JPA find拓展方法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • ssm?mybatis如何配置多個mapper目錄

    ssm?mybatis如何配置多個mapper目錄

    這篇文章主要介紹了ssm?mybatis如何配置多個mapper目錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Java使用GUI繪制線條的示例

    Java使用GUI繪制線條的示例

    這篇文章主要介紹了Java使用GUI繪制線條的示例,幫助大家更好的理解和學(xué)習(xí)java gui編程,感興趣的朋友可以了解下
    2020-09-09
  • Springboot+ElementUi實現(xiàn)評論、回復(fù)、點贊功能

    Springboot+ElementUi實現(xiàn)評論、回復(fù)、點贊功能

    這篇文章主要介紹了通過Springboot ElementUi實現(xiàn)評論、回復(fù)、點贊功能。如果是自己評論的還可以刪除,刪除的規(guī)則是如果該評論下還有回復(fù),也一并刪除。需要的可以參考一下
    2022-01-01
  • Java實現(xiàn)通過IP獲取IP歸屬地的方法(離線+在線)

    Java實現(xiàn)通過IP獲取IP歸屬地的方法(離線+在線)

    我們都知道安全攻擊都是在某臺客戶機(jī)上執(zhí)行某些惡意操作致使服務(wù)端響應(yīng)異常崩潰亦或響應(yīng)數(shù)據(jù)被篡改,首先我想到的是對訪問的web端做一個IP的校驗,那么我們首先得知道客戶端的IP是多少,接下來此文重點介紹如何獲得,需要的朋友可以參考下
    2023-10-10
  • SpringBoot使用Interceptor攔截器的實例

    SpringBoot使用Interceptor攔截器的實例

    這篇文章主要介紹了SpringBoot使用Interceptor攔截器的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • IDEA配置JRebel實現(xiàn)熱部署的方法

    IDEA配置JRebel實現(xiàn)熱部署的方法

    這篇文章主要介紹了IDEA配置JRebel實現(xiàn)熱部署的方法,本文給大家介紹的非常想詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 淺析打開eclipse出現(xiàn)Incompatible JVM的解決方法

    淺析打開eclipse出現(xiàn)Incompatible JVM的解決方法

    本篇文章是對打開eclipse出現(xiàn)Incompatible JVM的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-07-07
  • springboot注解Aspect實現(xiàn)方案

    springboot注解Aspect實現(xiàn)方案

    本文提供一種自定義注解,來實現(xiàn)業(yè)務(wù)審批操作的DEMO,不包含審批流程的配置功能。對springboot注解Aspect實現(xiàn)方案感興趣的朋友一起看看吧
    2022-01-01
  • Java RPC框架熔斷降級機(jī)制原理解析

    Java RPC框架熔斷降級機(jī)制原理解析

    這篇文章主要介紹了Java RPC框架熔斷降級機(jī)制原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 詳解Springboot之接收json字符串的兩種方式

    詳解Springboot之接收json字符串的兩種方式

    這篇文章主要介紹了Springboot之接收json字符串的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論