3.3.3 声明 JPA Repository
当您创建 JdbcTemplate 版本的存储库时,您明确声明了希望 repository 提供的方法。当使用 Spring Data JDBC 时,不用再明确实现类,而是扩展 CrudRepository 接口。事实上,CrudRepository 在 Spring Data JPA 下也可以很好的工作。例如,下面是一个新的 IngredientRepository 接口:
package tacos.data;
import org.springframework.data.repository.CrudRepository;
import tacos.Ingredient;
public interface IngredientRepository
extends CrudRepository<Ingredient, String> {
}
事实上,我们将用于 Spring Data JPA 的 IngredientRepository 接口,与我们定义的用于 Spring Data JDBC 的那个完全一样。CrudRepository 接口通常可以在 Spring Data 的许多项目中使用,而不用考虑底层的持久化机制。类似地,您可以为 Spring Data JPA定义 OrderRepository,这与为 Spring Data JDBC 定义的那个是一样的:
package tacos.data;
import org.springframework.data.repository.CrudRepository;
import tacos.TacoOrder;
public interface OrderRepository
extends CrudRepository<TacoOrder, Long> {
}
CrudRepository 提供的方法非常适合实体的能用持久化需求。但是如果有一些特殊的需求呢?让我们看看如何自定义 repository 来执行特有的查询。