一、JPA
Java Persistence API 对象持久化API;Java EE 5.0 平台标准 ORM 规范,使应用程序以统一访问持久层
1、和Hibernate关系
1)JPA 是 Hibernate 的抽象(JDBC和JDBC驱动关系),Hibernate 是 JPA 实现
2)JPA 是ORM 规范,提供API 接口,ORM 厂商实现;不是ORM 框架
3)功能上, JPA 是 Hibernate 子集
2、JPA供应商
Hibernate(一个作者,3.2 兼容 JPA)、OpenJPA(Apache 开源)、TopLink(开源)、EclipseLink
3、优点
1)标准化: 提供相同API,不同JPA 框架运行,修改少量
2)简单,集成方便: JPA 下建实体和建 Java 类一样简单,javax.persistence.Entity注解
3)媲美JDBC查询能力: JPA面向对象,JPQL支持批量更新和修改、JOIN、GROUP BY、HAVING 子查询等
4)面向对象 高级特性: 支持继承、多态和类间关系
4、JPA技术
ORM 映射元数据:支持 XML 、JDK 5.0 注解,元数据对象和表间关系,持久化到数据库
JPA 的 API:操作实体对象CRUD,从JDBC 和 SQL 解脱
JPQL:面向对象查询(非db),避免和SQL 紧密耦合
二、使用Jpa
1.创建、添加依赖jar,实际上来自 Hibernate
2.添加实体类
1)@Entity 项目启动时对类生成表(表名为类名 name)
2)@Id表示字段id,@GeneratedValue主键自增,其他根据属性名在表中生成相应字段,字段名和属性名相同
3)定制字段用@Column配置字段名称,长度,是否为空等
3、创建 persistence.xml
在META-INF 目录下放persistence.xml,名称固定
1)persistence-unit 的name 属性:持久化单元的名字(必填)
2)transaction-type:指定 JPA 事务处理策略。RESOURCE_LOCAL默认db级别事务,针对一种db,如需支持分布式事务用JTA:transaction-type="JTA"
3)class:显式列出实体类
4)properties两部分:db连接信息、Hibernate信息
4、执行持久化操作
1)根据配置文件创建EntityManagerFactory ,2)再根据 EntityManagerFactory 实例创建 EntityManager ,3)再开启事务,调EntityManager的 persist 持久化,4)最后提交事务,db多出t_book 表,有数据
二、Spring Data
1、基本环境搭建
1)创建依赖,添加实体
2)resources目录下创建applicationContext.xml,配置Spring和Jpa:
entityManagerFactory、Jpa事务、dao位置,配完在 org.sang.dao下创建相应Repository
2、Repository 接口
1)Spring Data核心接口,自定义接口中声明方法public interface Repository
2)继承Repository, 接口被 IOC 容器识别为 Repository Bean,纳入IOC,进而可以在该接口中定义满足一定规范的方法。
3)继承 Repository ,持久层上 @RepositoryDefinition ,指定 domainClass 和 idClass 属性
常用实现类:
CrudRepository: 继承 Repository,实现CRUD
PagingAndSortingRepository: 继承 CrudRepository,实现分页排序
JpaRepository: 继承 PagingAndSortingRepository,实现JPA 规范相关方法
自定义XxxxRepository :继承 JpaRepository,具备访问数据能力
JpaSpecificationExecutor: 不属于Repository,实现JPA Criteria 查询
3、常用注解
@Query 与 @Modifying 这两个 annotation一起声明
https://mp.weixin.qq.com/s/Fg5ssXuvabZwEfRMKfpY9Q