程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Java带有任意AND子句的动态Spring Data JPA存储库查询大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Java带有任意AND子句的动态Spring Data JPA存储库查询?

开发过程中遇到Java带有任意AND子句的动态Spring Data JPA存储库查询的问题如何解决?下面主要结合日常开发的经验,给出你关于Java带有任意AND子句的动态Spring Data JPA存储库查询的解决方法建议,希望对你解决Java带有任意AND子句的动态Spring Data JPA存储库查询有所启发或帮助;

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

在我们的项目之一,我们用queryDSLqueryDslPreDicateExecutor<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();
  }

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

@Repository
public interface DataEntityRepository
  extends DaoRepository<DataEntity, Long> {
哪里DaoRepository是

@norepositoryBean
public 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
}

解决方法

我正在使用Spring data jpa repositories,要求提供具有不同字段的搜索功能。搜索之前输入的字段是optional.I有5场说employeenumber,Name,Married,Profession和DateOfBirth
在这里我只需要查询用户给定的值,其他字段应该被忽略。

Input : employeenumber:,Name:St,Married:,Professsion:IT,DateOfBirth: 
Query : SELEct * from employee e where Name like 'St%' and Profession like 'IT%';  

Input : employeenumber:10,Name:,DateOfBirth:
Query : SELEct * from employee e where employeenumber like '10%' and Profession like 'IT%'; 

因此,这里我们虑输入的值和进行查询。在这种情况下,Spring数据是具有限制中提到的这篇文章(不可扩展,所有可能出现的问题,应书面)我使用的Querydsl,但仍然存在问题的null领域应该被忽视,需要开发的几乎所有可能出现的问题。在这case 31 queries。如果搜索字段是6,7,8...

用可选字段实现搜索选项的最佳方法是什么?

大佬总结

以上是大佬教程为你收集整理的Java带有任意AND子句的动态Spring Data JPA存储库查询全部内容,希望文章能够帮你解决Java带有任意AND子句的动态Spring Data JPA存储库查询所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。