查询方法

标准的CRUD功能的repositories通常在数据存储底层都有各种查询。使用Spring Data,声明这些查询有以下四步流程。

  1. 声明一个继承于Repository的接口或者一个子接口并注入实体类和它的ID类型
    1. interface PersonRepository extends Repository<User, Long> { }
  2. 在接口中声明查询方法
    1. interface PersonRepository extends Repository<User, Long> {
    2. List<Person> findByLastname(String lastname);
    3. }
  3. 使用Spring来为这些接口创建代理实例。也可以通过JavaConfig:
  1. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  2. @EnableJpaRepositories
  3. class Config {}

或者通过XML配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:jpa="http://www.springframework.org/schema/data/jpa"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/data/jpa
  8. http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
  9. <jpa:repositories base-package="com.acme.repositories"/>
  10. </beans>

JPA的命名空间也在这个例子中。如果你正在使用其他抽象repository,你需要改变相应的命名空间来替换jpa的声明支持你得存储模块,例如mongodb.并且注意JavaConfig的变量并不需要配置一个明确的包如同默认使用的声明类。定制包扫描。

4.
获取repository实例注入并使用它。

  1. public class SomeClient {
  2. @Autowired
  3. private PersonRepository repository;
  4. public void doSomething() {
  5. List<Person> persons = repository.findByLastname("Matthews");
  6. }
  7. }

以下的章节将会详细解释这些步骤