“修学好古,实事求是” — 《汉书.河间献王刘德传》

学问之功,贵乎循序渐进,经久不息。 — 梁启超

JPA 介绍

JPA 是 Java persistence API 的简称,中文名Java持久层API, 是JDK1.5注解或XML描述对象-关系表的映射关系,并将运行期的实体持久化到数据库中。JPA的宗旨是为POJO提供持久化标准规范。

JPA 包括以下3方面内容:

(1)一套API标准:操作实体对象,执行CRUD操作

(2)面向对象的查询语言:JPQL,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

(3)ORM(object / relational metadata ) 元数据的映射:元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。

JPA ORM 思想

ORM 一般指对象关系映射(Object Realational Mapping),是一种程序映射技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。主要表现为:

  • 实体类与表的映射关系
  • 实体类中的属性和表中的字段的映射关系

ORM 最大的好处就是让程序员关注在业务本身以及对OO(面向对象)程序设计,这个更加契合领域设计和OO设计,而不是一开始陷入数据库细节层面,影响总体设计。

市场上ORM框架对比

  • Mybatis : Apache 开源项目iBatis的化身,着力于POJO 与 SQL 之间的映射关系,可以进行更为细致的SQL,使用起来十分灵活,上手简单,容易掌握。
  • Hibernate:对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思想来操控数据库。并且对象有自己的生命周期,着力于对象和对象之间的关系。有自己的HQL语言,数据库移植性好。是一个完备的ORM框架,符合JPA规范。
  • Spring Data JPA:JPA 规范的再次封装抽象,底层使用Hibernate的JPA技术实现,属于 Spring 生态体系的一部分。

JPA 规范

  1. 厂家实现JPA规范,内部是由抽象类和接口组成。

Spring Data JPA 基础 - 图1

Spring Data JPA

关系结构图:

image.png

  • JpaRepository <操作的实体类的类型,实体类中主键属性的类型>
    • 封装了基本的CRUD操作
  • JpaSpecificationExecutor<操作的实体类类型>
    • 封装了复杂的查询(分页)

立即加载:findOne,立即加载

延迟加载:getOne,使用的时候加载,动态代理

JPA 加载原理:

  • 采用JDK动态代理invoke方法动态加载到类

JPA JPQL:JPA 语法规范

  • 使用 @Query 注解配置JPQL 语句

JPA 方法命名规则

  • findBy 和 findAllBy 的区别