spring-data-jpa原理的第四篇,来说说JpaQueryExecution相关类。首先给出类图和继承关系:
spring-data-jpa中对JpaQueryExecution有明确说明:
包含多个查询运行策略的类的集合。根据大多数org.springframework.data.repository.query.QueryMethod以及AbstractStringBasedJpaQuery中的返回类型,可以在各种风格中执行。
我们看到,spring-data-jpa使用了内部类来实现JpaQueryExecution的子类,也就是包含多个查询运行策略的(子)类。这么做其实是一种相对的封闭形式,造成使用者只能实例化spring-data-jpa给出的这8种子类。你无法实现自己的JpaQueryExecution子类,在spring框架初始化时通过配置加载之。
事实上JpaQueryExecution的作用就是,对类变量JpaQueryMethod method类实例进行判断,通过AbstractJpaQuery类的protected JpaQueryExecution getExecution()方法,选择一个JpaQueryExecution的子类进行实例化。
下面是AbstractJpaQuery抽象类的getExecution()方法代码:
protected JpaQueryExecution getExecution() {
if (method.isStreamQuery()) {
return new StreamExecution();
} else if (method.isProcedureQuery()) {
return new ProcedureExecution();
} else if (method.isCollectionQuery()) {
return new CollectionExecution();
} else if (method.isSliceQuery()) {
return new SlicedExecution(method.getParameters());
} else if (method.isPageQuery()) {
return new PagedExecution(method.getParameters());
} else if (method.isModifyingQuery()) {
return method.getClearAutomatically() ? new ModifyingExecution(method, em) : new ModifyingExecution(method, null);
} else {
return new SingleEntityExecution();
}
}
代码很简单,一目了然,根据method变量实例化时的查询设置方式,实例化不同的JpaQueryExecution子类实例去运行,如果难以判断,最后进入else判断语句,生成一个SingleEntityExecution实例。
SingleEntityExecution是JpaQueryExecution 8个内部子类其中的一个,全部代码如下:
static class SingleEntityExecution extends JpaQueryExecution {
@Override
protected Object doExecute(AbstractJpaQuery query, Object[] values) {
return query.createQuery(values).getSingleResult();
}
}
SingleEntityExecution只覆盖了一个父类方法,而且实现里只有一条语句query.createQuery(values).getSingleResult();在执行这句时,会调用底层数据库访问提供商,spring-data-jpa默认选择的是hibernate,执行数据库存取操作之后,将结果返回给这个JpaQueryExecution实例。
未完待续。
分享到:
相关推荐
赠送jar包:spring-data-jpa-2.0.9.RELEASE.jar; 赠送原API文档:spring-data-jpa-2.0.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-jpa-2.0.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-data-jpa...
spring-data-commons-1.7.2.RELEASEspring-data-jpa-1.5.2.RELEASE-java datajpa
赠送jar包:spring-data-jpa-2.0.9.RELEASE.jar; 赠送原API文档:spring-data-jpa-2.0.9.RELEASE-javadoc.jar; 赠送源代码:spring-data-jpa-2.0.9.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-data-jpa...
spring-data-jpa spring data jap
java运行依赖jar包
spring-data-jpa
SpringBoot是一款基于Spring框架的开发框架,而Spring-data-JPA是在Hibernate的基础上实现JPA规范的ORM框架。使用SpringBoot和Spring-data-jpa进行分页查询可以大大简化编码流程并提高开发效率。 在使用Spring-data...
spring data jpa最新版本1.8.0,包含了spring-data-jpa-1.8.0.RELEASE.jar,spring-data-jpa-1.8.0.RELEASE-javadoc.jar以及 spring-data-jpa-1.8.0.RELEASE-sources.jar文档和源代码
java运行依赖jar包
java运行依赖jar包
实现spring-data-jpa的增删改查方法,该项目是maven项目,需要maven支持
springboot-spring-data-jpa项目练习,整合了增删改查springboot-spring-data-jpa项目练习,整合了增删改查
spring-data-jpa-1.5.2
使用SpringBoot 集成Spring-data-jpa,Druid连接池,thymeleaf模板实现的一个简单网上商城项目
NULL 博文链接:https://mybar.iteye.com/blog/1863390
spring-data-jpa知识。
spring-data-jpa-1.4.2.RELEASE.jar
Spring Boot使用spring-data-jpa配置Mysql多数据源,可用版本
spring-data-jpa-reference1.3.pdf
spring-data-jpa-reference.pdf