13)Spring Data JPA

一、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 表,有数据

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("NewPersistenceUnit");

二、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{}    Spring Data 规范,无需写实现

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

你可能感兴趣的:(13)Spring Data JPA)