Spring:SpringDataJPA
写在前面
设定范围–>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注解
- 点赞
- 收藏
- 分享
- 文章举报
- Spring Boot整合Spring MVC、Spring、Spring Data JPA(Hibernate)
- 使用 Spring Data JPA 简化 JPA开发
- 智销系统项目day1 - 基础配置和SpringDataJpa
- spring data jpa
- Spring Data Jpa 概述(Spring Data Jpa 1)
- spring-data-jpa的使用详解,全方位,无死角
- 纯干货,Spring-data-jpa详解,全方位介绍。
- 了解Spring Data JPA
- spring data jpa中的DTO查询
- 从零开始学spring-boot(2)-集成spring-data-jpa
- JPA/Hibernate/Spring Data概念【从零开始学Spring Boot】
- JPA Spring Data 概述
- Spring Data JPA
- spring boot(五) spring data jpa的使用
- @Query注解的用法(Spring Data JPA)
- spring-data-jpa实现vo类的动态添加查询
- 在Spring Boot中使用Spring-data-jpa实现分页查询
- 使用 Spring Data JPA 简化 JPA 开发
- Spring Data JPA
- Spring boot学习之spring-data-jpa的使用(二)