Spring Data JPA 从入门到精通~JpaSpecificationExecutor实现原理

JpaSpecificationExecutor 实现原理

我们还是先通过开发工具,把关键的类添加到Diagram上面进行分析,如图:

我们通过上图可以看一下,前面介绍的几个类之间的关联关系。

SimpleJpaRepository 实现类中的关键源码如下:

/***以 findOne 为例
*/
public T findOne(Specification<T> spec) {try {return getQuery(spec, (Sort) null).getSingleResult();} catch (NoResultException e) {return null;}
}
/** 解析 Specification,利用 EntityManager 直接实现调用逻辑。
*/
protected <S extends T> TypedQuery<S> getQuery(Specification<S> spec, Class<S> domainClass, Sort sort) {CriteriaBuilder builder = em.getCriteriaBuilder();CriteriaQuery<S> query = builder.createQuery(domainClass);Root<S> root = applySpecificationToCriteria(spec, domainClass, query);query.select(root);if (sort != null) {query.orderBy(toOrders(sort, root, builder));}return applyRepositoryMethodMetadata(em.createQuery(query));
}

其实我们可以看的出来底层都是调用的 EntityManager。

与 EntityManager 的关系图

通过此图可以体会一下 Repository 和 EntityManager 的关联关系。

其实在实际项目中,我们的 Repository 可以扩展的更加优雅一点来解决后台 API 的 search 问题和如何自定义 Respository?下一篇内容将会来讲解这个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XML文档处理(树的应用)

1&#xff0e;问题陈述设计一个关于XML文档存取的类库&#xff0c;按树的方式处理XML文档&#xff0c;实现对树形文档进行一些基本操作的功能。2&#xff0e;基本要求内部要求&#xff1a;XML文档可一次全部读入内存后处理。至少设置文档类、XML元素类等。提供基本的树结构访问…

微信发布首份《移动支付时代的无人零售报告》

来源&#xff1a;爱范儿 作者&#xff1a;Panda3 月 30 日&#xff0c;微信支付行业运营总监白振杰在 2018 智慧无人零售大会上发布了《移动支付时代的无人零售行业报告》&#xff0c;报告首次结合中国百货商业协会权威调研和微信支付的数据分析能力&#xff0c;揭示了移动支…

mousemove事件java,three.js,补间相机和mousemove事件

我正在尝试使用three.js我正在使用补间移动相机&#xff0c;它工作得很好 . 但是&#xff0c;在动画结束时&#xff0c;相机会跳回到初始位置 .我发现mousemove事件导致了这种行为 . 我如何解决这个问题并保持补间动作和鼠标移动&#xff1f;我根据this example构建了我的three…

Spring Data JPA 从入门到精通~EntityManager介绍

EntityManager 介绍 我们前面已经无数次提到了&#xff0c;JPA 的默认 Repository 的实现类是 SimpleJpaRepository&#xff0c;而里面的具体实现就是调用的 EntityManager。对于 javax.persistence.EntityManager 通过源码&#xff0c;先来看下它主要给我们提供了哪几个方法&…

[转载]SQL SERVER 2008 阻止保存要求重新创建表的更改

微软新出了SQL Server 2008 数据库系统。在建完表后&#xff0c;如果要插入任意列&#xff0c;则提示&#xff0c;‘阻止保存要求重新创建表的更改’。 查了资料才明白如何解决这个问题。 当用户在在SQL Server 2008企业管理器中更改表结构时&#xff0c;必须要先删除原来的表&…

盘点《头号玩家》里的 VR 技术,现在就能造个 Oasis 出来

来源&#xff1a;沉浸感丨公众号 作者&#xff1a; 刘芳平由史蒂文斯皮尔伯格导演的科幻电影《头号玩家》&#xff08;Ready One Player&#xff09;于 3 月 30 日在中国大陆上映。首个周末便收获广泛好评&#xff0c;登上豆瓣电影本周口碑榜第一名&#xff0c;截止 31 日晚积…

find()matlab,Matlab 之 find()函数

当我第一次用matlab语言编写一个工程项目时&#xff0c;发现自己编写的脚本里循环特别多&#xff0c;导致编程效率很低&#xff0c;这让我特别苦恼。有一次导师让我阅读他编写的一个Matlab脚本&#xff0c;并按照新要求对其进行更改。我发现脚本里多次用到find()函数&#xff0…

Spring Data JPA 从入门到精通~自定义实现Repository

EntityManager 的获取方式 我们既然要自定义&#xff0c;首先讲一下 EntityManager 的两种获取方式。 1. 通过 PersistenceContext 注解。 通过将 PersistenceContext 注解标注在 EntityManager 类型的字段上&#xff0c;这样得到的 EntityManager 就是容器管理的 EntityMan…

一图看懂阿里云IoT战略

来源&#xff1a;云栖社区从万物互联到万物智联&#xff0c;离不开“无处不在的计算”。阿里云IoT在云边端部署了可协同的计算&#xff0c;基于物联网使能平台联合开发者、芯片模组厂商、行业合作伙伴等在城市、生活、汽车、制造四大领域已完成深度布局&#xff0c;即一朵云、两…

matlab机器人模型仿真,一知半解|MATLAB机器人建模与仿真控制(1)

各位机器人技术爱好者们&#xff0c;大家好&#xff01;很荣幸受古月老师邀请&#xff0c;成为古月居的签约作者。希望在这里可以同大家相互交流与学习。始终觉得自己能力不足&#xff0c;但终于还是硬着头皮开始了在古月居的第一篇博客。由于我是机械专业出身&#xff0c;在接…

第四期《Summer Tree》 已经整理完毕

虽然已经整理完毕&#xff0c;但是却没有空间上传&#xff0c;由于太大了上传不了.下次再补充回来 如果地址下载不到&#xff0c;告诉我。呵呵 我上传在微软共享空间里面 在这里可以下载在这里转载于:https://www.cnblogs.com/hero82748274/archive/2009/06/06/1497771.html

研究报告:城市大脑的起源、现状与未来趋势

报告撰写人&#xff1a;刘锋 《互联网进化论》作者&#xff0c;计算机博士2009年1月&#xff0c;IBM公司首席执行官彭明盛首次提出“智慧地球”&#xff0c;建议政府投资新一代的智慧型基础设施。此后智慧城市建设在世界范围内展开&#xff0c;在中国有上百个地区提出建设“智慧…

Spring Data JPA 从入门到精通~实际工作的应用场景

在实际工作中&#xff0c;有哪些场景会用到自定义 Repository 呢&#xff0c;这里列出几种实际在工作中的应用案例。 1. 逻辑删除场景 可以用到上面说的两种实现方式&#xff0c;如果有框架级别的全局自定义 Respository 那就在全局实现里面覆盖默认 remove 方法&#xff0c;…

Linux IO - 同步,异步,阻塞,非阻塞

From&#xff1a;http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步&#xff0c;阻塞/非阻塞概念深度解析&#xff1a;http://blog.csdn.net/lengxiao1993/article/details/78154467 知乎上关于 阻塞和非阻塞、同步和异步 之间区别的生动解释。 htt…

java treeset比较,java中TreeSet的两种排序比较的方式

第一种是使得元素具有比较性第二种是让集合具有比较性具体代码步骤如下&#xff1a;import java.util.*;/** TreeSet&#xff1a;可以自动对对集合中的元素进行排序* 第一种比较方式* 步骤&#xff1a;* 1.让元素对象的类具有比较性&#xff0c;并实现Comparable接口* 2.对其中…

在 IE 中使用 HTML5 元素

一个HTML5范本 <html><head><style>blah {color:red;}</style></head><body><blah>Hello!</blah></body></html>一个简洁的 方法 让样式在 IE 中作用到未知的元素上——仅需 JS 创建此未知元素即可&#xff1a; &…

微软 AI 设计原则:成为弱者,再带来惊喜

来源&#xff1a;36Kr 作者&#xff1a;木木子编者按&#xff1a;AI设计的思路是什么&#xff1f;更完美&#xff1f;更能想用户之所想&#xff1f;本文作者Cliff Kuang在“The company studied personal assistants–human ones–to understand how to make a great machine…

vim 中的杀手级插件: vundle (vim 插件管理器)

From&#xff1a;http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/ vundle.txt&#xff1a;https://github.com/VundleVim/Vundle.vim/blob/master/doc/vundle.txt Vundle 的具体介绍和配置&#xff1a;github repo&#xff1a;https://github.com/gmarik/vundl…

同步锁 php,python线程中同步锁详解

这篇文章主要为大家详细介绍了python线程中同步锁的相关资料&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下在使用多线程的应用下&#xff0c;如何保证线程安全&#xff0c;以及线程之间的同步&#xff0c;或者访问共享变量等问题是十分棘手的问题&a…

移动平均线分析法

移动平均线分析法是由道琼斯股价理论演变出来的一种股价趋势分析方法。其基本思想是消除股价随机波动的影响&#xff0c;以寻求股价波动的趋势。主要特点&#xff1a;1、追踪趋势&#xff1a;MA能够表示股价波动的趋势&#xff0c;并追踪这个趋势不轻易改变。2、滞后性&#xf…