Boh*_*anZ 5 spring spring-data spring-data-jpa
我试图通过几个参数找到表格的必要元素
List <Person> findByLastname(String lastname);
Run Code Online (Sandbox Code Playgroud)
但是如果将来添加/删除某些参数怎么办?如何使用Spring Data JPA使一些参数可选,如下所示
List <Person> findByOptionalLastnameAndOptionalFirstNameAnd...(String lastname, String firstname,...);
Run Code Online (Sandbox Code Playgroud)
我的任务是通过使用querydsl 框架解决的。如果您使用 gradle,则需要在build.gradle中添加以下内容:
dependencies {
compile "com.mysema.querydsl:querydsl-jpa:3.6.3"
compile "com.mysema.querydsl:querydsl-apt:3.6.3:jpa" // Magic happens here
compile "org.hibernate:hibernate-entitymanager:4.3.5.Final"
compile 'com.h2database:h2:1.4.187'
}
Run Code Online (Sandbox Code Playgroud)
也可以使用 JPA Criteria API,这里有很好的例子,这里有很好的教程。
@Entity
public class A {
@Id private Long id;
String someAttribute;
String someOtherAttribute;
...
}
Run Code Online (Sandbox Code Playgroud)
查询本身:
//some parameters to your method
String param1 = "1";
String paramNull = null;
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery cq = qb.createQuery();
Root<A> customer = cq.from(A.class);
//Constructing list of parameters
List<Predicate> predicates = new ArrayList<Predicate>();
//Adding predicates in case of parameter not being null
if (param1 != null) {
predicates.add(
qb.equal(customer.get("someAttribute"), param1));
}
if (paramNull != null) {
predicates.add(
qb.equal(customer.get("someOtherAttribute"), paramNull));
}
//query itself
cq.select(customer)
.where(predicates.toArray(new Predicate[]{}));
//execute query and do something with result
em.createQuery(cq).getResultList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5084 次 |
| 最近记录: |