相关文章推荐
读研的人字拖  ·  恢复数据库 | Microsoft Learn·  3 月前    · 
细心的羊肉串  ·  SQL ...·  3 月前    · 
怕老婆的铅笔  ·  WKWebView对网页和js,css,pn ...·  2 月前    · 
体贴的李子  ·  火山引擎-你的AI云·  3 周前    · 
面冷心慈的弓箭  ·  PyQt(Python+Qt)学习随笔:富文 ...·  2 年前    · 
纯真的橙子  ·  ubuntu找不到libXdamage.so ...·  2 年前    · 
谦虚好学的椰子  ·  npj: 高熵合金的相设计—机器学习_their·  2 年前    · 
文武双全的单车  ·  wpf image 点击事件-掘金·  2 年前    · 
强悍的足球  ·  shell语法错误,未预期的文件结尾-掘金·  3 年前    · 
Code  ›  第十四章:QueryDSL与SpringDataJPA共同服务于SpringBoot开发者社区
数据库
https://cloud.tencent.com/developer/article/1152738
忐忑的显示器
1 年前
恒宇少年

第十四章:QueryDSL与SpringDataJPA共同服务于SpringBoot

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
恒宇少年
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 第十四章:QueryDSL与SpringDataJPA共同服务于SpringBoot

第十四章:QueryDSL与SpringDataJPA共同服务于SpringBoot

作者头像
恒宇少年
发布 于 2018-06-27 15:17:18
1.9K 0
发布 于 2018-06-27 15:17:18
举报
文章被收录于专栏: SpringBoot 核心技术

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配套源码地址: https://gitee.com/hengboy/spring-boot-chapter

SpringCloud配套源码地址: https://gitee.com/hengboy/spring-cloud-chapter

SpringBoot相关系列文章请访问: 目录:SpringBoot学习目录

QueryDSL相关系列文章请访问: QueryDSL通用查询框架学习目录

SpringDataJPA相关系列文章请访问: 目录:SpringDataJPA学习目录

SpringBoot相关文章请访问: 目录:SpringBoot学习目录 ,感谢阅读!

本文参与 腾讯云自媒体同步曝光计划 ,分享自作者个人站点/博客。
原始发表:2017.04.15 , 如有侵权请联系 cloudcommunity@tencent.com 删除
spring
java
api
安全

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!

spring
java
api
安全
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
推荐阅读
LV.
文章
0
获赞
0
目录
  • 本章目标
  • 构建项目
  • 配置QueryDSL
  • 使用QueryDSL
  • Inquirer
  • 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
产品介绍
11.11 上云拼团GO
领券
  • 社区

    • 技术文章
    • 技术问答
    • 技术沙龙
    • 技术视频
    • 学习中心
    • 技术百科
    • 技术专区
  • 活动

    • 自媒体同步曝光计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2024 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
读研的人字拖  ·  恢复数据库 | Microsoft Learn
3 月前
细心的羊肉串  ·  SQL Server中提示对象名无效_数据库对象名无效怎么办
3 月前
怕老婆的铅笔  ·  WKWebView对网页和js,css,png等资源文件的缓存机制及如何刷新缓存-阿里云开发者社区
2 月前
体贴的李子  ·  火山引擎-你的AI云
3 周前
面冷心慈的弓箭  ·  PyQt(Python+Qt)学习随笔:富文本编辑器QTextEdit功能详解_51CTO博客_pyqt 富文本编辑器
2 年前
纯真的橙子  ·  ubuntu找不到libXdamage.so.1的解决方法 - 简书
2 年前
谦虚好学的椰子  ·  npj: 高熵合金的相设计—机器学习_their
2 年前
文武双全的单车  ·  wpf image 点击事件-掘金
2 年前
强悍的足球  ·  shell语法错误,未预期的文件结尾-掘金
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号