DebugEN
科技森
专注于Java开发~每天都会更新文章~
  1. 首页
  2. Java
  3. 正文

[原创] 在spring-boot中使用querydsl

2021年02月25日 2053点热度 0人点赞 0条评论 作者: kejisen

前言

querydsl是一个可以构建查询语句的java框架,它可以很方便的和jpa结合在一起使用,大大的简化了jpa语句的编写,再配合spring-data-jpa,大部分场景下都不需要编写hql语句了。本文将介绍如何在spring-boot中配合spring-data-jpa来使用querydsl

简单示例

你需要先添加依赖:

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <scope>provided</scope>
    </dependency>

当然前提是必须先添加 spring-boot、spring-data-jpa等的依赖并配置好数据库。

你还需要添加下面的maven plugin:

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>1.1.3</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>target/generated-sources/java</outputDirectory>
                <processor>
                    com.querydsl.apt.jpa.JPAAnnotationProcessor,lombok.launch.AnnotationProcessorHider$AnnotationProcessor
                </processor>
            </configuration>
        </execution>
    </executions>
</plugin>

依赖添加完成后,你就可以使用querydsql了,下面将介绍几种使用方式:

在Repository中使用

public interface ArchiveRepository extends PagingAndSortingRepository<Archive, Integer>, QuerydslPredicateExecutor<Archive> {
//...
}

上面的示例代码是我自己一个项目的Repository文件,可以看到其实现了QuerydslPredicateExecutor接口。

通过查看源码发现其有多个方法:
file

从截图中可以看到有一个Predicate类,这个Predicat类就是查询对象了,如果你有使用过mybatis-generator,那么这个Predicate是和Example类功能类似,你可以构建一个Predicate类,将其传入findAll方法,findAll方法还支持排序、分页等重载方法。

下面是我构建Predicate类的示例:

QArchive a = new QArchive("archive");
return archiveRepository.exists(a.site.id.eq(site.getId())
                .and(a.businessDate.eq(date)).and(a.language.eq(lan)));

有人肯定已经注意到了,凭空多出来一个 QArchive类,这个类其实就是querydal自己生成的一个Predicate类,通过这个类,你可以通过dsl的方式来生成查询条件(Predicate)类。

自动将前端参数转为Predicate对象

可以在Spring的controller上面增加Predicate参数,这样spring会自动将请求参数里与字段名同名的参数生成为一个Predicate对象,知识这样生成的查询条件将会是最简单的 and 和 equals逻辑。

一些使用场景

标签: querydsl springboot
最后更新:2021年03月03日

kejisen

保持饥渴的专注,追求最佳的品质

点赞
< 上一篇
下一篇 >

文章评论

取消回复
最新 热点 随机
最新 热点 随机
【原创】记录一次失败的折腾——使用jkeymaster实现的按键监听 【原创】这些年我用过的IDEA插件 【原创】在windows上使用VNC远程连接linux桌面 我在RxJava使用线程池时遇到的问题 [原创文章] Swagger生成pdf格式的接口文档 [个人翻译]Java HTTP工具类的客户端证书认证 [原创] 如何从 Git 的提交历史记录中删除大文件 [翻译] 创建一个只读的Repository接口(Spring Data) [翻译] 反射的用法——用Java调用私有方法 Java 虚拟机最多可以支持多少个线程? 排查Hibernate的慢查询日志–这是查找慢查询的最简单方法 [翻译] 使用apache poi在excel文件中插入一行数据 [翻译] 在Spring 中@EntityScan与@ComponentScan注解有什么区别 [原创] 从QQ音乐网页版扒歌词的补充说明 [原创] 介绍java maven项目的多种打包方式 原创——在Java中生成随机数 将G1垃圾回收的内存使用量减少20%(翻译) [原创] java8 lambda表达式的toMap造成的空指针异常 [原创] 在Spring Boot中使用CommandLineRunner来在启动时执行代码 [转载] Kafka 节点重启失败导致数据丢失的分析排查与解决之道
[转载] Kafka 节点重启失败导致数据丢失的分析排查与解决之道 [原创] 如何从 Git 的提交历史记录中删除大文件 使用Spring RestTemplate压缩请求 在Java中生成随机的日期 [原创] 关于Java的Base64编码 [原创] 在Spring Boot中使用CommandLineRunner来在启动时执行代码 [翻译] 反射的用法——用Java调用私有方法 [原创] 如何使用java(javamail)发送带附件的邮件 [原创]javaslang(vavr.io)中Try的使用 【原创】在windows上使用VNC远程连接linux桌面 Spring Boot项目修改Tomcat端口号 [个人翻译]Java HTTP工具类的客户端证书认证 中通Elasticsearch集群运维实践(二)--监控告警 java maven项目的几种打包方式 [原创] spring-boot返回json或者xml格式的数据 [原创] 在ubuntu18.04上安装chromedriver 如何设置Servlet的session超时时间 [原创] 介绍java maven项目的多种打包方式 [原创] 在spring-boot中使用querydsl 【原创】这些年我用过的IDEA插件
标签聚合
spring maven base64 歌词 java qq音乐 json linux springboot elasticsearch

COPYRIGHT © 2020 Kejisen. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS