网站首页 > 博客文章 正文
QueryDSL是一个Java语言编写的通用查询框架,专注于通过JavaAPI方式构建安全的SQL查询。QueryDSL可以应用到NoSQL数据库上,QueryDSL查询框架可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建SQL。目前QueryDSL支持的平台包扣JPA、JDO、SQL、Java Collections、RDF、Lucene、Hibernate Serch、MongoDB等。
本章目标
学习使用SpringBoot项目下SpringDataJPA与QueryDSL框架整合,完成多表关系复杂查询。
构建项目
本章开发工具使用IntelliJ IDEA,我们创建一个SpringBoot项目,预先导入Web、SpringDataJPA、MySQL、Durid依赖,目录结构如下图1所示:
图1
配置SpringDataJPA
本章就不做详细的介绍SpringDataJPA了,请复制第十三章:SpringBoot实战SpringDataJPA(源码地址:git.oschina.net/jnyqy/lessons),章节内的application.yml配置文件到本章resources目录下。如下图2所示:
图2
创建测试表
本章使用两张表进行讲解,两张表之间存在关联外检关系,我们使用商品信息表、商品分类信息表来讲解本章内容。
商品信息表结构如下图3所示:
图3
商品分类信息表结构如下图4所示:
图4
配置QueryDSL
我们在SpringBoot项目内使用queryDSL需要导入maven依赖以及添加maven插件,修改pom.xml配置文件添加querydsl依赖以及插件如下图5所示:
图5
上面我们导入的querydsl的maven依赖,下面的插件很重要,当我们执行maven compile命令的时候,queryDSL这个插件会自动在我们配置的目录下生成Qxxx结构化查询实体对象,querydsl完全采用面向对象的方式来创建查询。
生成Query查询对象
我们上面导入工作已经做完,接下来我们需要让maven执行querydsl的插件自动生成查询实体对象,我们需要先配置项目的maven命令,添加一条compile,点击:Run -> Edit Configurations -> "+" -> Maven,配置如下图6所示:
图6
配置完成后点击“Apply”后就已经配置好了,接下来我们运行maven compile命令,点击IntelliJ IDEA工具右上角选择maven compile执行,如下图7所示:
图7
点击绿色三角运行compile命令,控制台日志输出内容如下图8所示:
图8
maven输出的提示执行maven compile命令成功了,那么我们去target下查看是否已经创建了generated-sources/java目录,如下图9所示:
图9
文件内现在是没有内容的,因为我们还没有添加实体在项目中,下面我们根据数据库内的表结构创建对应实体。
商品信息实体内容如下图10所示:
图10
商品分类信息实体如下图11所示:
图11
上面两个实体内自行添加getter/setter方法,可以看到我们在商品信息实体内配置分类实体的关联而且是@OneToOne(一对一)的关联。
实体已经创建完成,下面我们再次执行maven compile命令,再次查看target下的querydsl目录内容变化,如下图12所示:
图12
目录内有两个querydsl插件自动生成的实体,命名规则就是原实体名称前+Q前缀。可以查看类内的代码,都是由querydsl插件自动构建的。
使用QueryDSL
准备工作已经做好,下面我们创建测试程序使用我们引入的querydsl完成查询功能,我们先来创建一个QueryController,作为访问入口,代码如下图13所示:
图13
使用QueryDslPredicateExecutor
我们创建一个GoodJPA接口,让其继承QueryDslPredicateExecutor接口,该接口是SpringDataJPA提供的querydsl查询接口。GoodJPA代码如下图14所示:
图14
这样GoodJPA就拥有了SpringDataJPA整合QueryDSL的方法实现,我们再来修改QueryController添加GoodJPA的Spring注入Bean,然后添加根据商品分类查询商品列表的方法。如下图15所示:
图15
上图5我们注入了EntityManager对象,因为我们构建JAPQuery对象需要它作为参数传入,使用QueryDSL查询的形式完全就是我们平时使用对象的形式那么简答,没有多余的内容!上面我完全使用的QueryDSL进行的查询操作,我们先像数据库表信息添加几条测试数据,然后访问测试下,下面接着说SpringDataJPA下怎么使用JPA。
独立QueryDSL查询测试
运行项目,访问地址:127.0.0.1:8080/query,界面输出内容如下图16所示:
图16
我查询的是分类为1的商品列表,可以看到数据完全正确的给我们返回了,这个仅仅是QueryDSL自己完成的操作,接下来我们使用SpringDataJPA整合QueryDSL完成相同的查询效果。
SpringDataJPA整合QueryDSL
我们打开QueryController添加join方法,代码如下图17所示:
图17
相对于单独的QueryDSL查询而言,整合的方式会更复杂一点,所以可以封装简单的查询对象来简化代码。
Inquirer
自定义查询实体类,该类可以完成查询添加封装,查询结果处理操作,具体代码如下图18、19所示:
图18
图19
简单的对查询条件,返回结果做出了封装,下面我们再来修改join方法的实现,如下图20所示:
图20
重启下项目访问地址测试,界面输出内容如下图21所示:
图21
总结
综上所述本章的内容已经讲解完成,本章主要讲解了SpringBoot项目下SpringDataJPA如果整合QueryDSL完成查询操作,单独QueryDSL查询如何完成查询,简单封装了查询对象Inquirer。
本公众号已开设如下二十大专题,欢迎长按以下二维码,查看相关专题!
- 【springboot专题】【spring源码】
- 【mysql优化专题】【HTTP协议】
- 【架构技术专题】【多线程专题】
- 【dubbo专题】【dubbo源码专题】
- 【JVM调优专题】【HTTP专题】
- 【设计模式专题】【高并发专题】
- 【架构技术专题】【Lucene专题】
- 【数据结构专题】【redis专题】
- 【mq中间件专题】【netty专题】
- 【java面试专题】【zookeeper】
猜你喜欢
- 2024-10-24 持久层框架JPA与Mybatis该如何选型
- 2024-10-24 hibatis--mybatis,自动生成SQL, 通用Mapper, 通用Dao
- 2024-10-24 Elasticsearch 6.0.0官方参考指南翻译
- 2024-10-24 推荐一个高效美观易用的服务器运维工具
- 2024-10-24 Java 操作之RestHighLevelClient查询详解
- 2024-10-24 如何在 Elasticsearch 上应用机器学习排序插件
- 2024-10-24 「开源资讯」Apache Solr 8.6.0 发布,Java 全文搜索服务器
- 2024-10-24 最轻量级的Kubernetes云原生日志框架Loki
- 2024-10-24 ElasticSearch学习系列 - (3) Python操作es
- 2024-10-24 全功能orm工具sorms 1.0.10 发布,合使用Spring,Spring boot用户
你 发表评论:
欢迎- 05-30springboot 集成redisson 以及分布式锁的使用
- 05-30去哪儿技术面:10亿数据如何最快速插入MySQL?
- 05-30redis介绍
- 05-30redission YYDS
- 05-30手把手教你springboot集成mybatis
- 05-30mybatis根据表逆向自动化生成代码:自动生成实体类、mapper文件
- 05-30越来越大的微信小程序
- 05-30SpringBoot之数据访问——访问SQL数据库!
- 422℃用AI Agent治理微服务的复杂性问题|QCon
- 420℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 401℃初次使用IntelliJ IDEA新建Maven项目
- 401℃Maven技术方案最全手册(mavena)
- 394℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 391℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 390℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 385℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)