SpringData JPA概述

发布于 2022-03-20  7.77k 次阅读


一,SpringData的概述

官方定义: Spring Data的使命是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数据存储的特殊特性。它使数据访问技术,关系数据库和非关系数据库, map-reduce框架和基于云的数据服务变得简单易用,这是一个伞形项目,其中包含许多特定于给定数据库的子项目

SpringData的巨大优势:统一数据访问层,它提供一致的基于Spring的编程模板

   对于每一种特定持久化存储,DAO通常需要为不同的存储库(如:Mysql,Redis等)提供不同的CRUD持久化操作,比如:操作Mysql使用jdbc或者框架mybatis等,操作Redis使用Jedis,这些适配操作的框架或工具都需要单独学习,十分繁琐,而SpringData为这些持久性存储以及特定实现提供了统一的通用接口和模板

SpringData的目的:统一和简化对不同类型持久性存储(关系性数据库和NoSql数据库)的访问和操作

① 不使用SpringData操作存储

    不同的存储工具提供单单独的适配包,我们提供导入这些依赖,操作存储,这些存储适配依赖没有统一的标准,还需要单独进行学习和操作

② 使用SpringData进行操作

SpringData提供了统一的接口和模板

SpringData支持的持久层技术非常多:

  • Spring Data Common:用于支持每个Spring Data模块的核心公共模块
  • Spring Data JDBC:对JDBC的Spring Data存储库支持
  • Spring Data MongoDB:基于Spring的对象文档支持MongoDB存储库
  • Spring Data Redis:从Spring应用程序轻松配置和访问Redis
  • Spring Data Rest:将Spring Data存储库导入超媒体驱动的RestFul资源
  •  ……………………

SpringData的主要特征:

1),模板制作

MongoTemplate,RedisTemplate,JdbcTemplate……模板提供存储特定操作,例如保存,更新和删除单个记录或用于执行查询映射

注:Spring Data JPA不提供模板,因为Jpa实现本身在Jdbc API之上,JPA的EntityManager是模板的对应物,异常转换由存储库实现处理

2),对象/数据存储映射

 通过xml或注解进行对象关系映射

3),Repository支持

Repository提供了最基本的数据访问功能,其几个子接口则拓展了一些功能

Repository:仅仅是一个标识,表明任何继承它的均为仓库接口类(继承关系如下)

  • CrudRepository:继承Repository,实现了一组CRUD相关的方法
  • PagingAndSortingRepository:继承了CrudRepository实现了分页排序相关方法
  • JpaRepsitory:继承PagingAndSortingRepository,实现了JPA规范的方法

二,JPA的介绍及和JDBC的关系

JPA:基于ORM理念的持久化技术标准,它提供了一系列的规范接口(由Sun在JDK1.5提出

作用:

  • 简化持久化的开发工作,让开发者从繁琐的JDBC和SQL代码中解脱出来,直接面向对象持久化操作
  • SUN希望持久化技术能够统一,如果基于JPA进行持久化能够随意的切换数据库

基于JPA的框架技术有:

  • Hibernate
  • OpenJPA
  • EclipseLink
  • ……

注:Mybatis也是ORM框架,但它并不是基于JPA

该规范提供了:

  • ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架将实体类对象持久化到数据库表中,如:@Entity,@Table,@ID与@Column等注解
  • JPA的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所以事情,如:entityManager.merge(T t)
  • JPQL查询语句:通过面向对象而非面向数据库的查询数据,避免程序的SQL语句紧密耦合,如:from Student s where s.name = ?

JPA和JDBC的异同:

同:

  1. 都跟数据库操作有关,JPA是JDBC的升华
  2. JDBC和JPA都是一组规范化接口
  3. 都是由SUN官方推出的

异:

  1. JDBC是基于不同关系型数据库驱动统一的接口标准,JPA是基于ORM思想
  2. JDBC使用SQL语句和数据库通信,JPA有面向对象方式,通过ORM框架来生成SQL
  3. JPA建立在JDBC的基础上,具体的数据库操作依赖于JDBC

注:JPA本质上是一种基于ORM思想建立在JDBC之上的规范,它没有具体的实现,但提供了一系列规范化接口,具体的实现由其他框架完成

JPA出现的目的:解决操作原生JDBC面临的一系列问题问题

原生JDBC开发时的问题:

  1. 需要面向SQL语句来操作数据库,开发人员学习成本高
  2. 数据库的移植性不高,不同数据库的SQL语句无法通用
  3. java对象和数据库类型的映射是个麻烦事

三,JPA和Hibernate,Mybatis的关系

JPA是一套基于ORM的规范,而Hibernate实现了JPA规范

本质上Hibernate就是实现了JPA接口的ORM框架

JPA并不具备操作数据库的能力,而是依赖它的实现,如:Hibernate等

四,SpringData JPA的概述

   SpringData JPA只是SpringData系列的一部分,可以更轻松实现基于JPA的Repositories,主要处理基于JPA的数据访问层的增强支持,它使构建使用数据访问技术的Spring驱动的应用程序变得更容易

SpringData JPA的简介:SpringData JPA是Spring提供的一套简化JPA开发的框架,按照约定的规则进行[方法命名]写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作,同时提供了很多除了CRUD之外的功能,如分页,排序,复杂查询等等

SpringData JPA让开发人员解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作中,推荐SpringData JPA + ORM(如:Hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便