引言
JPA是Java 持久化API的缩写,是一套Java数据持久化的规范,
Spring Data
Spring Data项目的目的是为了简化构建基于Spring 框架应用的数据访问技术,包括对关系型数据库的访问支持。另外也包含非关系型数据库、Map-Reduce框架、云数据服务等等。
Spring Data包含的子项目有:
Spring Data Commons
Spring Data JPA
Spring Data KeyValue
Spring Data LDAP
Spring Data MongoDB
Spring Data Gemfire
Spring Data REST
Spring Data Redis
Spring Data for Apache Cassandra
Spring Data for Apache Solr
Spring Data Couchbase (community module)
Spring Data Elasticseach (community module)
Spring Data Neo4j (community module)
Spring Data 的特点
Spring Data的宗旨就是统一数据访问的API。 所以它为我们提供使用统一的API来对数据访问层进行操作;这主要是Spring Data Commons项目来实现的。Spring Data Commons让我们在使用关系型或非关系型数据访问技术时都基于Spring 提供的统一标准,标准包括CRUD、排序和分页的相关操作。
统一的Repository接口
Repository<T, ID extends Serializable>:统一接口
RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>>:基于乐观锁机制
CrudRepository<T, ID extends Serializable> : 基本CRUD操作
PagingAndSortingRepository<T, ID extends Serializable>:基本CRUD及分页
数据访问模板类
如:MongoTemplate、RedisTemplate等
Spring Data JPA
1、JpaRepository基本功能
编写接口继承JpaRepository既有crud及分页等基本功能
2、定义符合规范的方法命名
在接口中只需要声明符合规范的方法,即拥有对应的功能:
interface PersonRepository extends Repository<User, Long> {List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);// Enables the distinct flag for the queryList<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);// Enabling ignoring case for an individual propertyList<Person> findByLastnameIgnoreCase(String lastname);// Enabling ignoring case for all suitable propertiesList<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);// Enabling static ORDER BY for a queryList<Person> findByLastnameOrderByFirstnameAsc(String lastname);List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}
3、@Query自定义查询,定制查询SQL
4、 Specification查询(Spring Data JPA支持JPA2.0的Criteria查询)
Spring Data结构图
来看一下Spring Data JPA相互间的结构关系:
可以看到,Spring Data JPA是针对于JPA规范开发的一套上层统一接口。它的实现有Hibernate、Toplink、OpenJPA等,因此,只要掌握了Spring Data JPA中数据访问用法,在实际生产中选择要实现的底层框架,就可以省去时间学习五花八门的实际数据访问框架,节约了学习成本。
综上,就是关于Spring Data JPA的相关介绍。