前言
在了解SpringData JPA之前,需要知道ORM以及JPA这个概念,其中ORM:Object Relational Mapping,即对象关系映射,它是一种面向对象的思想,即将一个类映射成一个关系(表),一个关系(表)映射成一个类,开发人员在与数据库进行交互时,就没必要面对一张张表,而是直接面对相应的表所映射的类,这里称之为实体类。简单来说:ORM是将表翻译成实体,通过操作实体类来达到操作数据库的目的。因此,使用ORM之后,传统的在代码中写大量SQL的现象就不存在了。
而另外一个概念JPA:Java Persistence API,是SUN公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成。通过注解描述对象与关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA的优势
1. 标准化
JPA 是 JCP 组织发布的 Java EE 标准之一,因此任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行,例如Hibernate
2. 容器级特性的支持
JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
3. 简单方便
JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成
4. 查询能力
JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句。它定义了独特的JPQL(Java Persistence Query Language),它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。学习成本低,通过简单查询文档就可以掌握,可以说会SQL语句就会JPQL
5. 高级特性
JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系(关联,依赖,聚合,组合),这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。
JPA的核心类及作用
JPA的执行过程包括四大核心类,分别为Persistence,EntityManagerFactory,EntityManager,EntityTransaction 。在Spring中需要通过配置文件,将这些类的相关信息添加到配置文件中,最后完成各种对象的生成,这里介绍一下大致的原理,细节不再赘述,因为最终介绍SpringBoot整合SpringData JPA
Persistence
Persistence对象主要作用是用于获取EntityManagerFactory对象的 。通过调用该类的createEntityManagerFactory静态方法,根据配置文件中持久化单元名称创建EntityManagerFactory。例如:
String persistenceUnit = "persistenceUnit ";
EntityManagerFactory factory= Persistence.createEntityManagerFactory(persistenceUnit);
EntityManagerFactory
顾名思义,此工厂用于创建EntityManger