spring data jpa官方文档
Spring Data JPA 是更大的 Spring Data 家族的一部分,可以轻松实现基于 JPA 的存储库。该模块处理对基于 JPA 的数据访问层的增强支持。它使构建使用数据访问技术的 Spring 驱动的应用程序变得更加容易。
实施应用程序的数据访问层已经很麻烦了。必须编写太多样板代码来执行简单的查询以及执行分页和审计。Spring Data JPA 旨在通过减少实际需要的工作量来显着改进数据访问层的实现。作为开发人员,您编写存储库接口,包括自定义查找器方法,Spring 将自动提供实现。
| ORM框架 | 优点 | 缺点 |
|---|---|---|
| MyBatis | MyBatis是Apache的一个开源项目iBatis,其着力与POJO与SQL之间的映射关系,可以进行更为细致的SQL编写,使用起来十分灵活,上手简单,容易掌握,目前市场占有率最高,比较适合互联网公司的API场景 | 工作量比较大,需要各种配置文件和SQL语句 |
| Hibernate | Hibernate是一个开发源码的对象关系映射框架,它对JDBC进行非常轻量级的对象封装,使得JAVA开发人员可以随心所欲使用面向对象思想进行操控数据库,有自己的HQL语言,数据库移植行好,Hibernate是完备的ORM框架,符合JPA规范,有自己的缓存机制 | 上手比较难,符合企业级的应用系统开发 |
| Spring Data JPA | 可以理解为对JPA的再次封装,底层还是使用了Hibernate的JPA技术实现,应用JPQL查询语言,属于Spring生态,上手简单,开发效率高,对对象的支持较好,有很大的灵活性 | 入门简单,上手快,但是想要精通就需要了解很多东西 |
| OpenJPA | Apache开源组织提供的一个开源项目,它实现了EJB3.0的JPA标准,为开发提供强大的功能、使用简单的持久化框架 | 功能、性能、普及性等方面需要加大力度,所以使用的人不是太多 |
| QueryDSL | QueryDSL是一个对ORM框架扩展的操作,提供了一种通用的Util和方法来来构建查询参数的API,提供统一的抽象 |
JPA 是 JDK 5.0 新增的协议,通过相关持久层注解(@Entity 里面的各种注解)来描述对象和关系型数据里面的表映射关系,并将 Java 项目运行期的实体对象,通过一种Session持久化到数据库中。
JPA 的宗旨是为 POJO 提供持久化标准规范,可以集成在 Spring 的全家桶使用,也可以直接写独立 application 使用,任何用到 DB 操作的场景,都可以使用,极大地方便开发和测试,所以 JPA 的理念已经深入人心了。Spring Data JPA、Hibernate 3.2+、TopLink 10.1.3 以及 OpenJPA、QueryDSL 都是实现 JPA 协议的框架,他们之间的关系结构如下图所示:

Spring Data 利用一个大家熟悉的、一致的、基于“注解”的数据访问编程模型,做一些公共操作的封装,它可以轻松地让开发者使用数据库访问技术,包括关系数据库、非关系数据库(NoSQL)。同时又有不同的数据框架的实现,保留了每个底层数据存储结构的特殊特性。包含如下模块: