spring-data-jpa原理探秘(2)-RepositoryQuery的用途和分类

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
本系列的第二篇文章,主要讲解在spring-data-jpa中占有重要地位的RepositoryQuery接口的用途和分类。
首先我们看看RepositoryQuery接口极其子类的类图

上图很清晰的说明,RepositoryQuery接口包含SimpleJpaQuery,NativeJpaQuery,PartTreeJpaQuery,NamedQuery,StoredProcedureJpaQuery等(叶子节点)子类。

JpaRepositoryFactory类在动态实例化Repository接口时,其父类RepositoryFactorySupport定义了一个私有Map类变量:
private final Map<Method, RepositoryQuery> queries = new ConcurrentHashMap<Method, RepositoryQuery>();
而动态实例化Repository接口时,将实例化一个QueryExecutorMethodInterceptor,为其增加监听和interceptor。上篇文章提到过,QueryExecutorMethodInterceptor是RepositoryFactorySupport的内部类,实现了org.aopalliance.intercept.MethodInterceptor拦截器接口。
实例化QueryExecutorMethodInterceptor时会直接执行其构造器,我们看到,给每个方法都创建了一个RepositoryQuery实例,并put到了上面所说的ConcurrentHashMap私有Map类变量中,代码如
spring-data-jpa原理探秘(1)-运行环境创建及加载Repository接口 spring-data-jpa的优点很多,比如继承Repository接口,在注解中书写JPQL语句即可访问数据库;支持方法名解析方式访问数据库;使用Predicate支持动态查询等,在此不一一列举了。这些都是使用spring-data-jpa中的种种优点,要想将之使用的更好更优雅,就要从spring-data-jpa的加载运行机制进行探秘。 此文系作者查看spring-data-jpa源码及 阅读详情

相关推荐

jpa 自定义扩展实现原理

时间真快,一晃已经2021半年又过去了,年前初制定的每周一篇文章没有实现。~~~ 因工作项目开发需要,最近研究了下jpa的功能。主要为了实现两个目标需求: 实现可以类似mybatis,可以使用配置文件编写复杂的sql管理。 拦截执行sql执行,可以动态添加公共字段。如插入时,可以统一插入公共时间、创建人等公共属性。 扩展JpaRepository,实现自定义业务公共方法。 JPA引入 <dependency> <groupId>org.springfram

xefei博客 1463

springboot中JpaRepository下@Query使用原生sql进行查询的几种用法

最近在项目开发的时候,采用springboot自带的JPA进行原生sql的查询,趟雷中归纳几种可以用来进行单表部分查询、多表关联部分查询、分页查询的几种用法。 设定查询表 //第一张表 public class Student { private String studentid; private String name; private String age; ...

qq_26434357的博客 1万+

spring data jpa通过方法名称定义查询的实现机制解析

使用方法 spring data jpa其实体Repository继承Repository接口,如JpaRepository等接口,也可以选择JpaSpecificationExecutor,这样就可以使用方法名称,来定义查询 如 List<User> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname) List<User> findDistinctPeopleByLastnameOrFi

u013905744的专栏 3005

SpringDataJPA系列(5)@Query应该怎么用?

能用方法名表示的,尽量用方法名表示,因为这样语义清晰、简单快速,基本上只要编译通过,一定不会有问题能用 @Query 里面的 JPQL 表示的,就用 JPQL,这样与 SQL 无关,万一哪天换数据库了,基本上代码不用改变最后实在没有办法了,可以选择 nativeQuery 写原始 SQL,特别是一开始从 MyBatis 转过来的同学,选择写 SQL 会更容易一些。

临江仙的博客 1509

jpa:repository中@Query有nativeQuery = true没有的区别

有nativeQuery = true时,是可以执行原生sql语句,所谓原生sql,也就是说这段sql拷贝到数据库中,然后把参数值给一下就能运行了,比如: @Query(value = "select * from product_rel where audit_id=?1 and process_object=0 ",nativeQuery = true) List<ProductRel> findAllByProductAuditId(Integer id); 这个时候,把sele

不花的花和尚的博客 3248

spring-data-jpa原理过程

  RepositoryFactoryBeanSupport 1,创建工厂,获取entitymanager   afterPropertiesSet 2,获取工厂代理,包括 查询类策略RepositoryQuery实例即@Query标签的  放到map中        initAndReturn   一个RepositoryQuery实例持有一个JpaQueryMethod实例,Jp...

yuhui666666的博客 357

Spring Data Relational源码解析:深入理解框架设计原理的终极指南

Spring Data Relational 是 Spring 生态中用于关系型数据库访问的核心框架,它为开发者提供了简单而强大的数据访问解决方案。作为 Spring Data JDBC Spring Data R2DBC 的家园,这个框架通过精简的设计理念,让关系型数据库操作变得前所未有的简单高效。本文将深入解析 Spring Data Relational 的源码设计原理,帮助您全面理解

gitblog_00181的博客 998

JpaRepository的关联查询@Query查询

一pom <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache...

实践求真知 8505

jpa学习5--spring data jpa 中的JpaRepository 使用 @Query 注解

jpa学习5--spring data jpa 中的JpaRepository 使用 @Query 注解 1.使用@Query自定义查询, •这种查询可以声明在 Repository方法中,摆脱像命名查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是Springdata 的特有实现。 如: //WHERE lastName LIKE ?% AND id < ? List

qq_31968809的博客 3921

【源码】Spring Data JPA原理解析之Repository自定义方法命名规则执行原理(一)

本篇主要分析Spring Data JPA中自定义Repository按命名规则的方法的实现原理的解析部分。重点分析了JpaQueryLookupStrategy、PartTree、QueryPreparer的源码

JingAi_jia917的博客 2184

SpringBoot使用JpaRepository方法命名@Query查询的一些复杂场景

JpaRepository方法命名@Query查询各有所长。对用户查询使用的建议@Query吧,需求怪异的多些。内部模型间逻辑的用JpaRepository方法命名查询还是很高效的,可读性也很强。

qq_37372909的博客 1393

【源码】Spring Data JPA原理解析之Repository自定义方法添加@Query注解的执行原理

本篇从源码角度分享Repository中自定义方法带@Query注解的接口的实现原理。重点分析了ExpressionBasedStringQuery、StringQueryAbstractStringBasedJpaQuery的源码。

JingAi_jia917的博客 1956

JpaRepository 实现简单条件查询】

程序清单:/jpa/src/main/java/com/dwx/repository/UserRepository.javaimport comUser;程序清单:/jpa/src/main/java/com/dwx/service/UserService.java} }List;

weixin_38729502的博客 2390

JpaRepository使用

Jpa查询 1. JpaRepository简单查询 基本查询也分为两种,一种是spring data默认已经实现,一种是根据查询的方法来自动解析成SQL。 预先生成方法 spring data jpa 默认预先生成了一些基本的CURD的方法,例如:增、删、改等等 继承JpaRepository public interface UserRepository extends JpaRepos...

人生最遗憾的莫过于:轻易地放弃了不该放弃的,固执地坚持了不该坚持的 5715
上一篇: spring-data-jpa原理探秘(1)-运行环境创建及加载Repository接口
下一篇: spring-data-jpa原理探秘(3)-QueryMethod类
千山独行
博客等级 码龄26年 27粉丝 69原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值