您正在寻找的是规范模式,以下将与Spring Data JPA进行讨论:
https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-
and-querydsl/
以及关于每个查询具有查询方法的说明:
尽管这种方法确实很方便(您甚至不必编写一行实现代码即可执行查询),但它有两个缺点:首先,由于-,对于较大的应用程序,查询方法的数量可能会增加。第二点-
查询定义了一组固定的条件。为避免这两个缺点,如果您能提出一组可以动态组合以构建查询的原子谓词,这不是很酷吗?
您可以使用JPA标准API或QueryDSL来实现规范模式。使用后者,就像让您的存储库扩展以下接口一样容易:
http://docs.spring.io/spring-
data/commons/docs/current/api/org/springframework/data/querydsl/QueryDslPredicateExecutor.html
并将对Querydsl的支持添加到您的项目中。对于Maven项目,您只需要将以下配置添加到POM。该插件将自动生成构造谓词所需的Query类,然后您可以使用任何参数组合调用存储库的以下方法:
Iterable<T> findAll(com.querydsl.core.types.OrderSpecifier<?>... orders)Iterable<T> findAll(com.querydsl.core.types.Predicate predicate)Iterable<T> findAll(com.querydsl.core.types.Predicate predicate, com.querydsl.core.types.OrderSpecifier<?>... orders)Page<T> findAll(com.querydsl.core.types.Predicate predicate, Pageable pageable)Iterable<T> findAll(com.querydsl.core.types.Predicate predicate, Sort sort)T findOne(com.querydsl.core.types.Predicate predicate)
使用这种方法,您的PatientRepository就会变得简单:
PatientRepository extends JpaRepository<Patient, Long>, QueryDslLPredicateExecutor<Patient> { // no query methods needed}请注意,Spring Data
Gosling发行版还添加了对将HTTP参数自动绑定到QueryDSL谓词的支持,因此您还可以删除Filter并让Spring Data端到端处理所有内容。
https://spring.io/blog/2015/09/04/what-s-new-in-spring-data-release-
gosling#querydsl-web-support
这里有一些示例显示了使用各种参数调用一种查询方法:
http://codingdict.com/questions/54783
Maven设置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> ..... <properties> <querydsl.version>4.1.3</querydsl.version> </properties> <dependencies> ..... <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> <version>${querydsl.version}</version> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <version>${querydsl.version}</version> </dependency> </dependencies> <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></project>


