有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

springboot中基于实体camelcase变量nam的java命名存储库方法

我知道在spring boot中,在存储库中创建find方法将基于实体的变量名。如果实体中的变量是驼峰大小写,如何在存储库中创建find方法。这就是我创造的,对吗

class Person { 
      private int id;  
      private Teacher teacher;  //other variable...getters and setters }
      private BranchManager branchManager;  //other variable...getters and setters }

class Teacher { 
      private String firstName ;  
      private String lastName;  //getters and setters }

class BranchManager { 
      private String firstName ;  
      private String lastName;  //getters and setters }

在我的存储库中

@Repository
public interface PersonRepository extends CrudRepository<Person, Long>{


      public Person findPersonByTeacherFirstName(String firstName);

      //how to find Person by BranchManager firstName and lastName

}

共 (1) 个答案

  1. # 1 楼答案

    首先,您没有在Person中声明Teacher对象。假设您将声明如下:

    private Teacher teacher; // name of this object is important to create the repository methods
    

    试试看

    List<Person> findByTeacher_FirstName(String name);
    

    注意,它返回一个列表

    如果只想返回第一条记录。您可以使用以下命令

    Person findFirstByTeacher_FirstName(String name);
    

    而且,我个人更喜欢

    Optional<Person> findFirstByTeacher_FirstName(String name);
    

    因为这将返回可选。空()以防找不到记录。此外,它还将迫使您检查它的存在,从而避免NullPointerException

    更新1

    根据评论中的要求,
    如果你想通过firstName和lastName查找,你可以使用以下方法

    Person findFirstByTeacher_FirstNameAndTeacher_LastName(String firstName, String lastName);
    

    你可以参考这个link来了解这些约定

    更新2

    按branchManager的名字和姓氏搜索

    Person findFirstByBranchManager_FirstNameAndBranchManager_LastName(String firstName, String lastName);
    

    更新3

    正如Aluan Haddad在评论中提到的,这种做法是不可扩展的

    作为一种选择,我提供了另一种方法来点击数据库的查询
    您可以创建一个示例对象,并将其传递给findAll(Example e)JpaRepository实现

    final Teacher exampleTeacher = new Teacher();
    exampleTeacher.setName("Teacher Name");
    final Person examplePerson = new Person();
    example.setTeacher(exampleTeacher);
    

    现在使用

    List<Person> findAll(Example.of(examplePerson));
    

    这将返回所有教师名为Teacher Name的人

    作为C#EntityFramework的替代方案,您可以在Java中使用QueryDSL