SpringData组件之Repository接口概述

前言

在《Spring框架组件之Spring Data》中,讲述Spring框架组件SpringData使用时提到了到Spring Data组件一个很重要的接口Repository接口,本篇文章在《Spring框架组件之Spring Data》的基础上着重讲述一下Repository接口。


Repository 接口概述

Repository 接口是 Spring Data的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法;

1
public interface Repository<T, ID extends Serializable> { }

Spring Data可以让我们自定义接口,只要遵循 Spring Data的规范,就无需写实现类,例如:

1
2
public interface PersonRepsotory extends Repository<Person,Integer>{
}

与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。如下两种方式是完全等价的,如下图

Repository


Repository 的子接口

基础的 Repository 提供了最基本的数据访问功能,其几个子接口则扩展了一些功能。它们的继承关系如下:

Repository

  • -Repository:仅仅是一个标识,表明任何继承它的均为仓库接口类
  • -CrudRepository<:继承 Repository,实现了一组 CRUD 相关的方法
  • -PagingAndSortingRepository:继承 CrudRepository,实现了一组分页排序相关的方法
  • -JpaRepository:继承 PagingAndSortingRepository,实现一组 JPA 规范相关的方法
  • -自定义的 XxxxRepository:需要继承 JpaRepository,这样的 XxxxRepository 接口就具备了通用的数据访问控制层的能力 
  • -JpaSpecificationExecutor:不属于Repository体系,实现一组 JPA Criteria 查询相关的方法。

CrudRepository 接口

CrudRepository 接口提供了最基本的对实体类的添删改查操作

  • T save(T entity); //保存单个实体
  • Iterablesave(Iterable<? extends T> entities);//保存集合
  • T findOne(ID id);//根据id查找实体
  • boolean exists(ID id);//根据id判断实体是否
  • IterablefindAll();//查询所有实体,不用或慎用!
  • long count();//查询实体数量
  • void delete(ID id);//根据Id删除实体
  • void delete(T entity);//删除一个实体
  • void delete(Iterable<? extends T> entities);//删除一个实体的集合
  • void deleteAll();//删除所有实体,不用或慎用!

PagingAndSortingRepository接口

该接口提供了分页与排序功能

  • IterablefindAll(Sort sort);//排序
  • PagefindAll(Pageable pageable);//分页查询(含排序功能)

JpaRepository 接口

该接口提供了JPA的相关功能

  • ListfindAll();//查找所有实体
  • ListfindAll(Sort sort);//排序、查找所有实体
  • Listsave(Iterable<? extends T> entities);//保存集合
  • void flush();//执行缓存与数据库同步
  • T saveAndFlush(T entity);//强制执行持久化
  • void deleteInBatch(Iterableentities);//删除一个实体集合

JpaSpecificationExecutor接口

该接口不属于Repository体系,它实现一组 JPA Criteria 查询相关的方法
JpaSpecificationExecutor接口

  • -Specification:封装 JPA Criteria 查询条件。通常使用匿名内部类的方式来创建该接口的对象

自定义 Repository 方法

为某一个 Repository 上添加自定义方法,详见《SpringData组件之自定义Repository方法》。