栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java带有任意AND子句的动态Spring Data JPA存储库查询

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java带有任意AND子句的动态Spring Data JPA存储库查询

请注意,使用新的主要版本的QueryDSL(4.x)和querydsl-jpa可能需要进行一些更改。

在我们的项目之一,我们用

QueryDSL
QueryDslPredicateExecutor<T>

  public Predicate createPredicate(DataEntity dataEntity) {    QDataEntity qDataEntity = QDataEntity.dataEntity;    BooleanBuilder booleanBuilder = new BooleanBuilder();    if (!StringUtils.isEmpty(dataEntity.getCnsiConsumerNo())) {      booleanBuilder        .or(qDataEntity.cnsiConsumerNo.contains(dataEntity.getCnsiConsumerNo()));    }    if (!StringUtils.isEmpty(dataEntity.getCnsiMeterNo())) {      booleanBuilder.or(qDataEntity.cnsiMeterNo.contains(dataEntity.getCnsiMeterNo()));    }    return booleanBuilder.getValue();  }

我们可以在存储库中使用它:

@Repositorypublic interface DataEntityRepository  extends DaoRepository<DataEntity, Long> {哪里DaoRepository是@NoRepositoryBeanpublic interface DaoRepository<T, K extends Serializable>  extends JpaRepository<T, K>,  QueryDslPredicateExecutor<T> {}

因为这样,您可以使用存储库谓词方法。

Iterable<DataEntity> results = dataEntityRepository.findAll(dataEntityPredicateCreator.createPredicate(dataEntity));

要获取QClasses,您需要在pom.xml中指定QueryDSL APT Maven插件。

  <build>    <plugins>      <plugin>        <groupId>com.mysema.maven</groupId>        <artifactId>maven-apt-plugin</artifactId>        <version>1.0.4</version>        <executions>          <execution> <phase>generate-sources</phase> <goals>   <goal>process</goal> </goals> <configuration>   <outputDirectory>target/generated-sources</outputDirectory>   <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor> </configuration>          </execution>        </executions>      </plugin>

依赖项是

    <!-- querydsl -->    <dependency>        <groupId>com.mysema.querydsl</groupId>        <artifactId>querydsl-core</artifactId>        <version>${querydsl.version}</version>    </dependency>    <dependency>        <groupId>com.mysema.querydsl</groupId>        <artifactId>querydsl-apt</artifactId>        <version>${querydsl.version}</version>    </dependency>    <dependency>        <groupId>com.mysema.querydsl</groupId>        <artifactId>querydsl-jpa</artifactId>        <version>${querydsl.version}</version>    </dependency>

或对于Gradle:

sourceSets {    generated}sourceSets.generated.java.srcDirs = ['src/main/generated']configurations {    querydslapt}dependencies {    // other deps ....    compile "com.mysema.querydsl:querydsl-jpa:3.6.3"    compile "com.mysema.querydsl:querydsl-apt:3.6.3:jpa"}task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') {    source = sourceSets.main.java    classpath = configurations.compile + configurations.querydslapt    options.compilerArgs = [ "-proc:only", "-processor", "com.mysema.query.apt.jpa.JPAAnnotationProcessor"    ]    destinationDir = sourceSets.generated.java.srcDirs.iterator().next()}compileJava {    dependsOn generateQueryDSL    source generateQueryDSL.destinationDir}compileGeneratedJava {    dependsOn generateQueryDSL    classpath += sourceSets.main.runtimeClasspath}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号