Querydsl mongodb gradle springboot问题
Posted
技术标签:
【中文标题】Querydsl mongodb gradle springboot问题【英文标题】:Querydsl mongodb gradle springboot issue 【发布时间】:2017-01-18 08:36:07 【问题描述】:我正在尝试在我的项目中使用 querydsl,就像在 spring boot 文档中描述的那样, springboot-mongodb-look at 5.3.4 这样我就可以做到了,
QPerson person = new QPerson("person");
List<Person> result = repository.findAll(person.address.zipCode.eq("C0123"));
Page<Person> page = repository.findAll(person.lastname.contains("a"),
new PageRequest(0, 2, Direction.ASC, "lastname"));
我正在使用 gradle build 和 mongodb 作为数据库。
我的问题是,在 querydsl 文档中,只提供了 maven 集成。 querydsl document link 即
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>$querydsl.version</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-mongodb</artifactId>
<version>$querydsl.version</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
现在,配置生成 Querydsl 使用的查询类型的 Maven APT 插件:
<project>
<build>
<plugins>
...
<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.morphia.MorphiaAnnotationProcessor</processor>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
</project>
这可以使用 gradle 集成吗?如果是,请提供解决方案。
【问题讨论】:
【参考方案1】:看看querydsl-with-gradle-and-idea和Configuring QueryDSL for Spring Data and MongoDB with Gradle:
他们使用:
compile "com.mysema.querydsl:querydsl-apt:3.6.3:jpa"
compile "com.querydsl.apt:querydsl-mongodb:4.0.9"
和github corneil's spring-data-demo 的完整示例,详细在这里:QueryDSL for Mongo with Spring and gradle
【讨论】:
【参考方案2】:对我来说帮助这篇文章add Querydslsupport
接下来添加到你的 gradle 文件中:
buildscript
repositories
jcenter()
dependencies
classpath "gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.9"
apply plugin: 'com.ewerk.gradle.plugins.querydsl'
sourceSets
main
java
srcDir "$buildDir/generated/source/app/main"
dependencies
compile "com.querydsl:querydsl-mongodb:4.1.4"
compileOnly "com.querydsl:querydsl-apt:4.1.4"
querydsl
springDataMongo = true
querydslSourcesDir = "$buildDir/generated/source/app/main"
之后,您应该将 @Document
注释添加到您的实体类并构建。您将在 querydslSourcesDir 中指定的文件夹下看到生成的 Q 文件。
【讨论】:
【参考方案3】:这就是 QueryDSL MongoDB 4.4.0 和 Gradle 7 对我有用的地方。
将以下依赖项添加到您的 build.gradle 文件中。
implementation "com.querydsl:querydsl-mongodb:4.4.0"
annotationProcessor("com.querydsl:querydsl-apt:4.4.0:general", "javax.annotation:javax.annotation-api")
注意:我们需要 javax.annotation:javax.annotation-api
以便 APT 处理器可以理解您的域类中的 @NotNull 等。
使用com.querydsl.core.annotations
包中的@QueryEntity
注释(来自上面的第一个依赖项)注释您的域类。
让 Gradle 发挥它的魔力,你会看到 QClasses 。
【讨论】:
以上是关于Querydsl mongodb gradle springboot问题的主要内容,如果未能解决你的问题,请参考以下文章
带有 QueryDSL 和 Gradle 的 IntelliJ 15
QueryDSL:使用 Kotlin 和 Gradle 生成类失败
Java 11 + QueryDSL 4 + Gradle 5 + SpringBoot 2.1-不生成 QClasses