一、简介
JPA,即Java Persistence API,是一种标准的技术,但不是一种框架,他可以让你将对象映射到关系型数据库中。
Spring Data JPA是Spring Data系列的一部分,可以轻松实现基于JPA的存储库。该模块处理对基于JPA的数据访问层的增强的支持。这使得使用数据访问技术构建Spring供电的应用程序变得更加容易。
Spring Data JPA旨在通过减少实际需要的数量来显着提高数据访问层的实现。作为开发人员,您编写存储库接口(包括自定义查找器方法),Spring将自动提供实现。
二、Spring Data JPA的特征
三、Spring Data JPA具体使用
Spring Data 存储库抽象概念的目标是显著的减少为各种持久性存储实现数据访问层所需的样板代码的数量。
- 核心概念
Spring数据存储库抽象中的中心接口是存储库。它需要域类来管理,以及域类的ID类型作为类型的参数。这个接口主要作为一个标记接口来捕获要使用的类型,并帮助您发现扩展这个接口的接口。CrudRepository为正在管理的实体类提供了复杂的CRUD功能。
- CurdRepository接口如下:
package org.springframework.data.repository; import java.util.Optional; @NoRepositoryBean public interface CrudRepository<T, ID> extends Repository<T, ID> { //保存给定的实体类 <S extends T> S save(S var1); //保存所有给定的实体类 <S extends T> Iterable<S> saveAll(Iterable<S> var1); //根据给定的ID查找实体类 Optional<T> findById(ID var1); //根据给定的ID判断是否存在 boolean existsById(ID var1); //返回所有的实体类 Iterable<T> findAll(); //返回根据给定的Id对应的实体类 Iterable<T> findAllById(Iterable<ID> var1); //返回总数 long count(); //根据给定的ID进行删除 void deleteById(ID var1); //根据给定的实体进行删除 void delete(T var1); //根据给定的所有实体进行删除 void deleteAll(Iterable<? extends T> var1); //删除所有 void deleteAll(); }
此外也提供了持久化技术特定的抽象,比如JpaRepository或者MongoRepository,这些接口继承了CrudRepository,同时也暴露了除了CrudRepository一般的持久性技术无关的一些接口功能。
在JpaRepository上边有一个抽象的PagingAndSortingRepository 接口,这个接口添加了额外的方法分页访问实体。
- PagingAndSortingRepository 接口如下:
package org.springframework.data.repository; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @NoRepositoryBean public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> { //按照排序规则查询所有实体 Iterable<T> findAll(Sort var1); //分页查询 Page<T> findAll(Pageable var1); }
- JpaRepository接口如下:
package org.springframework.data.jpa.repository; import java.util.List; import org.springframework.data.domain.Example; import org.springframework.data.domain.Sort; import org.springframework.data.repository.NoRepositoryBean; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.QueryByExampleExecutor; @NoRepositoryBean public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> { List<T> findAll(); List<T> findAll(Sort var1); List<T> findAllById(Iterable<ID> var1); <S extends T> List<S> saveAll(Iterable<S> var1); void flush(); <S extends T> S saveAndFlush(S var1); void deleteInBatch(Iterable<T> var1); void deleteAllInBatch(); T getOne(ID var1); <S extends T> List<S> findAll(Example<S> var1); <S extends T> List<S> findAll(Example<S> var1, Sort var2); }