簡體   English   中英

在哪些情況下,JpaRepository 會自動創建查詢,而無需使用 @Query 批注

[英]In which cases does JpaRepository automatically create the query without you having to use @Query annotation

我正在學習 Spring Boot 中的 Udemy 教程。 有一部分@Query未用於存儲庫界面中的用戶創建方法。 它的工作原理,但我想知道JpaRepository需要創建查詢的照顧。 在下面的User類中,沒有使用@Table

findByEmail(String email)方法無需任何實現/定義即可工作。 所以,我的印象是,JpaRepository 自動創建了Select from User where email = emailargument

所以這就是我所擁有的

帶有表User名為reservation

應用程序屬性

spring.datasource.url=jdbc:mysql://localhost:3306/reservation
spring.datasource.username=root

用戶.java

import javax.persistence.Entity;

@Entity
public class User extends AbstractEntity{

    
    private String firstName;
    private String lastName;
    private String email;
    private String password;
    
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

用戶存儲庫.java

import org.springframework.data.jpa.repository.JpaRepository;

import com.project.flightreservation.entities.User;

public interface UserRepository extends JpaRepository<User, Long> {

User findByEmail(String email);

}

當 Spring Data 創建一個新的 Repository 實現時,它會分析接口定義的所有方法,並嘗試從方法名稱自動生成查詢。 雖然這有一些限制,但它是一種非常強大且優雅的方式,可以輕松定義新的自定義訪問方法。 參考

通過實現 Repository 接口之一,DAO 已經定義和實現了一些基本的 CRUD 方法(和查詢)。

您可以使用此方法參考創建更復雜的查詢。您發布的問題稱為自動自定義查詢。

JPA 具有以不同方式構造查詢的能力。 您可以使用從 methodName 派生的查詢與謂詞IsStartingWithStartingWithStartsWithIsEndingWithEndingWithEndsWithIsNotContainingNotContainingNotContainsIsContainingContainingContains這些查詢的相應參數將被清理。

如果你面對其中或者方法名解析器不支持您要使用或方法的名稱會得到不必要的丑關鍵字的情況下,你可以使用@QuerynamedQuery支持JPQLnativeQuery

我強烈建議您閱讀此文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM