“修学好古,实事求是” — 《汉书.河间献王刘德传》
学问之功,贵乎循序渐进,经久不息。 — 梁启超
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 规范
厂家实现JPA规范,内部是由抽象类和接口组成。
Spring Data JPA
关系结构图:
- JpaRepository <操作的实体类的类型,实体类中主键属性的类型>
- 封装了基本的CRUD操作
- JpaSpecificationExecutor<操作的实体类类型>
- 封装了复杂的查询(分页)
立即加载:findOne,立即加载
延迟加载:getOne,使用的时候加载,动态代理
JPA 加载原理:
- 采用JDK动态代理invoke方法动态加载到类
JPA JPQL:JPA 语法规范
- 使用 @Query 注解配置JPQL 语句
JPA 方法命名规则
- findBy 和 findAllBy 的区别