spring-data的Dsl查詢

  1. 第一步, 生成查詢對象
    在一個jpa項目中加入如下依賴和配置:
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-apt</artifactId>
    <scope>provided</scope>
</dependency>
<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.jpa.JPAAnnotationProcessor</processor>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

如果報找不到Inject類還需要加入:

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

然后去命令行運行mvn clean compile (IDEA的compile好像不行), 插件會掃描@Entity對象并且按名稱生成查詢對象, 例如@Entity class Country會生成class QCountry類, 代碼在指定的outputDirectory里

將生成的查詢對象移動到項目里

repository繼承QueryDslPredicateExecutor<T>

public interface CountryRepository extends JpaRepository<Country, String>, QueryDslPredicateExecutor<Country> {
}

下邊是一個條件查詢的例子, 使用了Pageable

private Page<Country> searchByContinent(String continent, Pageable pageable) {
    BooleanBuilder booleanBuilder = new BooleanBuilder();
    if (hasLength(continent)) {
        booleanBuilder.and(QCountry.country.continent.eq(continent));
    }

    return countryRepository.findAll(booleanBuilder.getValue(), pageable);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容