3.2. 查询方法

标准的CRUD功能存储库通常对底层数据存储查询。Spring Data把这些查询变成了四个步骤的过程:

1、声明一个接口继承Repository或其子类,输入实体类型和ID类型。

interface PersonRepository extends Repository<User, Long> { … }

2、在接口里声明查询方法。

interface PersonRepository extends Repository<Person, Long> {
  List<Person> findByLastname(String lastname);
}

3、为这些接口创建代理实例,也可通过 JavaConfig :

import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@EnableJpaRepositories
class Config {}

或通过xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jpa="http://www.springframework.org/schema/data/jpa"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/data/jpa
     http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

   <jpa:repositories base-package="com.acme.repositories"/>

</beans>

本例中使用了JPA名称空间。如果您正在使用repository中的抽象为任何其他数据源,你需要改变这种适当的名称空间声明你的存储模块来与jpa支持,例如:mongodb

注意,不用通过Java变量来配置包,默认情况下回根据注解的类来自动声明。定制的包扫描可以使用basePackage属性,特定的库可以使用@Enable来注解。

4、获得repository 实例注入并使用它。

class SomeClient {

  @Autowired
  private final PersonRepository repository;
  
  SomeClient(PersonRepository repository) {
      this.repository = repository;
  }

  public void doSomething() {
    List<Person> persons = repository.findByLastname("Matthews");
  }
}

接下来的小节详细解释每一个步骤。


书籍推荐