繁体   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