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

Java 基于实体camelcase变量nam的springboot中存储库命名方法,java,spring,spring-boot,spring-data,Java,Spring,Spring Boot,Spring Data,我知道在SpringBoot中,在存储库中创建find方法将基于实体的变量名。如果实体中的变量是驼峰大小写,如何在存储库中创建find方法。这就是我创造的,对吗 class Person { private int id; private Teacher teacher; //other variable...getters and setters } private BranchManager branchManager; //other vari

我知道在SpringBoot中,在存储库中创建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

}
@存储库
公共接口PersonRepository扩展了Crudepository{
公共人物findPersonByTeacherFirstName(字符串名);
//如何通过BranchManager的名字和姓氏查找人员
}

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

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

而且,就我个人而言,我更喜欢

Optional<Person> findFirstByTeacher_FirstName(String name);
关于这些约定,您可以参考这个

更新2

按branchManager的名字和姓氏搜索

Person findFirstByBranchManager_FirstNameAndBranchManager_LastName(String firstName, String lastName);
更新3

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

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

final Teacher exampleTeacher = new Teacher();
exampleTeacher.setName("Teacher Name");
final Person examplePerson = new Person();
example.setTeacher(exampleTeacher);
现在使用将此
examplePerson
传递到
Repository

List<Person> findAll(Example.of(examplePerson));
List findAll(例如,of(examplePerson));
这将返回其教师姓名为
教师姓名
的所有人员


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

您是否尝试过使用
公共人物findPersonByTeacher#u firstName(字符串firstName)使用Java8。别再写那种废话了。@AluanHaddad你有什么建议或例子来说明如何使用Java 8。使用这个和使用Java8有什么区别。我刚刚接触spring,如有任何建议,将不胜感激。蒂娅,谢谢你。我只想问另一个问题。与上述场景相同。我想找一个老师教的人。在上面的示例中,所需的参数仅为firstName,如果现在我还想按教师搜索此人,但我想使用firstName和lastName进行搜索。我该怎么做呢。最后一个问题@ansh。我在Person对象中有另一个对象。该对象的名称为BranchManager(请注意,名称为驼峰大小写)。与教师对象一样,它也有firstName和lastName属性。我还想按分行经理的名字和姓氏搜索此人。我更新了我的问题并添加了Branch Manager类。您可以创建一个类似的方法,唯一需要记住的是,
branchManager
将成为
findByBranchManager…
这样一种糟糕的编码实践,以采用各种字符串的特殊查询方法的形式,积累大量无法维护的垃圾。您现在已经有了Java中的基本lambda表达式(基本的,但仍然比这个更好),请使用它们!哇!!你的意思是,使用lambda表达式从大型数据集表中获取记录吗?您的意思是要获取其教师Id=1的人员列表,我必须获取所有人员(通过连接各个教师),然后通过原始lambda进行过滤
Person findFirstByBranchManager_FirstNameAndBranchManager_LastName(String firstName, String lastName);
final Teacher exampleTeacher = new Teacher();
exampleTeacher.setName("Teacher Name");
final Person examplePerson = new Person();
example.setTeacher(exampleTeacher);
List<Person> findAll(Example.of(examplePerson));