最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于@Query注解的用法(Spring Data JPA)

 更新時間:2022年03月12日 12:17:26   作者:迷失之路  
這篇文章主要介紹了關(guān)于@Query注解的用法(Spring Data JPA),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@Query注解的用法

1.一個使用@Query注解的簡單例子

@Query(value = "select name,author,price from Book b where b.price>?1 and b.price<?2")
List<Book> findByPriceRange(long price1, long price2);

2.Like表達式

@Query(value = "select name,author,price from Book b where b.name like %:name%")
List<Book> findByNameMatch(@Param("name") String name);

3.使用Native SQL Query

所謂本地查詢,就是使用原生的sql語句(根據(jù)數(shù)據(jù)庫的不同,在sql的語法或結(jié)構(gòu)方面可能有所區(qū)別)進行查詢數(shù)據(jù)庫的操作。

@Query(value = "select * from book b where b.name=?1", nativeQuery = true)
List<Book> findByName(String name);

4.使用@Param注解注入?yún)?shù)

@Query(value = "select name,author,price from Book b where b.name = :name AND b.author=:author AND b.price=:price")
List<Book> findByNamedParam(@Param("name") String name, @Param("author") String author,
? ? ? ? @Param("price") long price);

5.SPEL表達式(使用時請參考最后的補充說明)

'#{#entityName}'值為'Book'對象對應(yīng)的數(shù)據(jù)表名稱(book)。

public interface BookQueryRepositoryExample extends Repository<Book, Long>{
? ? ? ?@Query(value = "select * from #{#entityName} b where b.name=?1", nativeQuery = true)
? ? ? ?List<Book> findByName(String name);
}

6.一個較完整的例子

public interface BookQueryRepositoryExample extends Repository<Book, Long> {
? ? @Query(value = "select * from Book b where b.name=?1", nativeQuery = true)?
? ? List<Book> findByName(String name);// 此方法sql將會報錯(java.lang.IllegalArgumentException),看出原因了嗎,若沒看出來,請看下一個例子
? ? @Query(value = "select name,author,price from Book b where b.price>?1 and b.price<?2")
? ? List<Book> findByPriceRange(long price1, long price2);
? ? @Query(value = "select name,author,price from Book b where b.name like %:name%")
? ? List<Book> findByNameMatch(@Param("name") String name);
? ? @Query(value = "select name,author,price from Book b where b.name = :name AND b.author=:author AND b.price=:price")
? ? List<Book> findByNamedParam(@Param("name") String name, @Param("author") String author,
? ? ? ? ? ? @Param("price") long price);
}

7.解釋例6中錯誤的原因

因為指定了nativeQuery = true,即使用原生的sql語句查詢。使用java對象'Book'作為表名來查自然是不對的。只需將Book替換為表名book。

@Query(value = "select * from book b where b.name=?1", nativeQuery = true)
List<Book> findByName(String name);

補充說明:

有同學(xué)提出來了,例子5中用'#{#entityName}'為啥取不到值?。?/p>

先來說一說'#{#entityName}'到底是個啥。從字面來看,'#{#entityName}'不就是實體類的名稱么,對,他就是。

實體類Book,使用@Entity注解后,spring會將實體類Book納入管理。默認(rèn)'#{#entityName}'的值就是'Book'。

但是如果使用了@Entity(name = "book")來注解實體類Book,此時'#{#entityName}'的值就變成了'book'。

到此,事情就明了了,只需要在用@Entity來注解實體類時指定name為此實體類對應(yīng)的表名。在原生sql語句中,就可以把'#{#entityName}'來作為數(shù)據(jù)表名使用。

@Query注解使用詳情

常用屬性

  • value : 取值,要么使用原生SQL,要么使用JPQL
  • nativeQuery :表示是否采用原生SQL,諸如select * from tableName

取值方式

1、使用:形參名

示例:

單個形參的情況

:參數(shù)名

多個形參的情況:

:參數(shù)名

2、使用?數(shù)值,數(shù)值表示形參位置,1表示第一個形參,依次內(nèi)推

示例:

單個形參的情況:

?數(shù)值

多個形參的情況:

?形參序列

特殊情況:數(shù)值也可不寫,若不寫具體的數(shù)值,默認(rèn)是從1開始遞增,如下圖示例:

特殊情況

3、使用@Param("參數(shù)名")+:參數(shù)名

通常使用@Param注解都是在多個形參的情況下使用

@Param()

4、獲取實體類名稱,使用#{#entityName}

使用#{#entityName}

CRUD

使用@Query注解實現(xiàn)刪、改、查、增的示例,如下所示:

@Modifying
@Transactional
@Query(value = "delete from User where id = ?1")
void deleteByUserId(Integer id);

?后面的數(shù)值1,表示第一個形參的值,以此類推,如果方法有多個形參,數(shù)值也會依次遞增,特殊情況,數(shù)值也可不寫,若不寫具體的數(shù)值,默認(rèn)是從1開始遞增

@Modifying
@Transactional
@Query("update User set email = ?1 where id = ?2")
void updateUser(String email,Integer id);
@Query(value = "select * from tb_user ?where ?email like concat('%',?2,'%') and username like concat('%',?1,'%') ",nativeQuery = true)
User findByUsernameAndEmail( String username, String email);
@Modifying
@Transactional
@Query(value = "insert into tb_user(email,id_card,username,wage) values (:email,:idCard,:username,:wage)",nativeQuery = true)
void insertUser(String email,String idCard,String username,Double wage);

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于javaWeb中405錯誤的解決方法

    關(guān)于javaWeb中405錯誤的解決方法

    下面小編就為大家?guī)硪黄P(guān)于javaWeb中405錯誤的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 使用GSON庫轉(zhuǎn)換Java對象為JSON對象的進階實例詳解

    使用GSON庫轉(zhuǎn)換Java對象為JSON對象的進階實例詳解

    這篇文章主要介紹了使用GSON庫轉(zhuǎn)換Java對象為JSON對象的進階實例詳解,包括注冊TypeAdapter及處理Enum類型等實際運用中可能遇到的一些復(fù)雜問題,需要的朋友可以參考下
    2016-06-06
  • SpringBoot調(diào)用DeepSeek接口的實現(xiàn)

    SpringBoot調(diào)用DeepSeek接口的實現(xiàn)

    本文主要介紹了SpringBoot調(diào)用DeepSeek接口的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • jenkins+Maven從SVN上構(gòu)建項目的方法

    jenkins+Maven從SVN上構(gòu)建項目的方法

    這篇文章主要介紹了jenkins+Maven從SVN上構(gòu)建項目,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot整合OpenApi的實踐

    SpringBoot整合OpenApi的實踐

    本文主要介紹了SpringBoot整合OpenApi,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 關(guān)于jdk環(huán)境變量配置以及javac不是內(nèi)部或外部命令的解決

    關(guān)于jdk環(huán)境變量配置以及javac不是內(nèi)部或外部命令的解決

    這篇文章主要介紹了關(guān)于jdk環(huán)境變量配置以及javac不是內(nèi)部或外部命令的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Java實現(xiàn)多線程下載和斷點續(xù)傳

    Java實現(xiàn)多線程下載和斷點續(xù)傳

    這篇文章主要為大家詳細介紹了Java實現(xiàn)多線程下載和斷點續(xù)傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java使用Sftp和Ftp實現(xiàn)對文件的上傳和下載

    Java使用Sftp和Ftp實現(xiàn)對文件的上傳和下載

    這篇文章主要介紹了Java使用Sftp和Ftp實現(xiàn)對文件的上傳和下載,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 關(guān)于@JsonProperty和@JSONField注解的區(qū)別及用法

    關(guān)于@JsonProperty和@JSONField注解的區(qū)別及用法

    這篇文章主要介紹了關(guān)于@JsonProperty和@JSONField注解的區(qū)別及用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • java使用定時器實現(xiàn)監(jiān)聽數(shù)據(jù)變化

    java使用定時器實現(xiàn)監(jiān)聽數(shù)據(jù)變化

    這篇文章主要為大家詳細介紹了Java如何使用定時器監(jiān)聽數(shù)據(jù)變化,當(dāng)滿足某個條件時(例如沒有數(shù)據(jù)更新)自動執(zhí)行某項任務(wù),有興趣的可以了解下
    2023-11-11

最新評論

榆中县| 阳高县| 高邑县| 原平市| 哈巴河县| 台东县| 桃园县| 建瓯市| 清水县| 云阳县| 哈巴河县| 碌曲县| 永顺县| 昆明市| 阜新| 清苑县| 额尔古纳市| 金华市| 隆子县| 昆明市| 锦州市| 海盐县| 察雅县| 和静县| 南华县| 永泰县| 昌吉市| 临高县| 云林县| 伊通| 临沂市| 县级市| 新泰市| 陈巴尔虎旗| 景泰县| 鸡西市| 黄陵县| 宣化县| 项城市| 凯里市| 葵青区|