Query Methods

标准 CRUD 功能存储库通常针对底层数据存储具有查询。使用 Spring Data,声明这些查询会变成一个四步过程:

  1. 声明一个扩展 Repository 或其子接口之一的接口,并将其类型指定为它应该处理的域类和 ID 类型,如下例所示:[source, java]

interface PersonRepository extends Repository<Person, Long> { … }
  1. 在接口上声明查询方法。[source, java]

interface PersonRepository extends Repository<Person, Long> {
  List<Person> findByLastname(String lastname);
}
  1. 使用 JavaConfigXML configuration 设置 Spring 以为那些接口创建代理实例。

Java
import org.springframework.data.….repository.config.Enable{store}Repositories;

@Enable{store}Repositories
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
     https://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/data/jpa
     https://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

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

</beans>

本示例中使用了 JPA 名称空间。如果您对任何其他存储使用存储库抽象,则需要将其更改为您存储模块的相应名称空间声明。换句话说,您应该用 mongodb 代替 jpa 。 请注意,JavaConfig 变体不会显式地配置包,因为默认情况下使用带注释类的包。要自定义要扫描的包,请使用数据存储特定存储库的 @Enable{store}Repositories 注释的 basePackage… 属性之一。 . 注入存储库实例并使用它,如下例所示:[source, java]

class SomeClient {

  private final PersonRepository repository;

  SomeClient(PersonRepository repository) {
    this.repository = repository;
  }

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

以下部分详细解释了每个步骤: