您的位置:首页 > 编程语言 > Java开发

Spring:SpringDataJPA

2020-01-11 18:04 127 查看

写在前面

设定范围–>Spring-Data-Comment

基础概念

JPA :Java Persistence API Java持久化对象
API : application program interface 应用程序接口
HibernateJPA : Hibernate 实现了JPA接口,符合JPA规范
SpringDataJPA: 对JPA规范的再次封装,整合到Spring-Data项目中.
主要SpringData子项目:

Spring Data Commons

Spring Data Gemfire

Spring Data JPA

Spring Data KeyValue

Spring Data LDAP

Spring Data MongoDB

Spring Data REST

Spring Data Redis

Spring Data for Apache Cassandra

Spring Data for Apache Solr

  • JPA和Hibernate以及SpringDataJPA的关系

SpringData实现原理

上面说了SpringDataJPA的Spring为了实现JPA的所有接口实现统一而设立的项目,Spring-Data-Comment,是所有项目的基础,所有了解这个基础是了解整个JPA生态的基石.
在Spring Data Common这个基础包下面的核心部分:七个核心接口和2个实现类

  • 需要了解到的接口和类

七个核心接口

//所有接口的起源,没有定义方法,只是起到标识作用
Repository (org.springframework.data.repository)
//定义了基础的CRUD方法
CrudRepository (org.springframework.data.repository)
//主要是分页和排序的方法
PagingAndSortingRepository(org.springframework.data.repository)
//通过Example来查询,不能实现Or链接
QueryByExampleExecutor(org.springframework.data.repository.query)
//JPA包中的类,面向关系型数据库进行的数据封装(包含分页排序和根据example查询)
JpaRepository(org.springframework.data.jpa.repository)
//JPA 2.0提供的Criteria查询,支持几乎所有的复杂查询
JpaSpecificationExecutor(org.springframework.data.jpa.repository)
//
QueryDslPredicateExecutor(org.springframework.data.querydsl)

两个核心类

//JPA的简单实现类
SimpleJpaRepository(org.springframework.data.jpa.repository.support)
QueryDslJpaRepository(org.springframework.data.jpa.repository.support)

简单的实现逻辑
在定义的repository接口中,通过继承接口比如CrudRepository,或者PagingAndSortingRepository接口,在DataJPA包中有一个SimpleJpaRepository类,它是实现了以上这些接口,也就是说可以通过反向代理+多态来实现接口指向实现类的引用来实现数据查询.
当然上面的实现原理是最初始的,如果通过方法名实现查询,或者通过注解实现查询,就需要进行解析,动态创建实例对象.也就是说
用户没有为每个自定义的JpaRepository接口提供实现类,但是Spring Data JPA 最终将每个这样的bean最终映射到了一个统一的实现类SimpleJpaRepository的代理对象,而这个代理对象能支持所有每个自定义的JpaRepository接口定义的功能和SimpleJpaRepository类中定义的所有功能。

通过方法名自定义查询

  • 首先需要进行查询策略的设置,@EnableJpaRepositories(queryLookupStrategy=???),问好里面的参数可以是三者之一:CREATE,通过方法名创建,USE_DECLARED_QUERY,通过注解里面的Sql进行查询,CREATE_IF_NOT_FOUND,默认查询策略,也就是两者都包含.
  • 根据方法名进行查询,方法解析器的解析算法拿到Path,跟数据库表所对应的类的属性进行匹配,来拿到确切的关键字来进行数据查询,同时要知道JPA中自定义的关键字会在前面进行拆分转为对应的Sql关键字.

根据注解查询

  • 需要掌握的有@Quary和@Parm注解
  • 点赞
  • 收藏
  • 分享
  • 文章举报
青语玉 发布了50 篇原创文章 · 获赞 0 · 访问量 603 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: