我有一张桌子
客户(姓名,性别,州,年龄,城市)
我希望通过
的组合过滤我的客户表(性别,州,城市,年龄)
用户可以输入任何一个,两个,三个或四个过滤条件。我坚持写这个标准查询我怎么能这样做?
package com.thoughtclan.segmentationofcustomers.specification;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.data.jpa.domain.Specification;
import com.thoughtclan.segmentationofcustomers.model.Customer;
public class FilterCriteria implements Specification<Customer> {
private SearchCriteria criteria;
@Override
public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
// TODO Auto-generated method stub
return null;
}
}
你能解释一下吗?
**
这是我的服务类方法
**
public Set<Customer> filterDetails(TargetGroupDto targetGroupDto) {
// TODO Auto-generated method stub
}
答案 0 :(得分:0)
您应该将过滤器选项存储在某个类中。而不仅仅是检查它们是否存在并添加标准。
Criteria criteria = session.createCriteria(Customer.class);
// here you receive some DTO with filter fields
if (filter.getState != null) {
criteria.add(Restrictions.eq("state", filter.getState));
}
if (filter.getCity != null) {
criteria.add(Restrictions.eq("city", filter.getCity));
}
criteria.list() // return result
session.close() // or you can use try-with-resources
答案 1 :(得分:0)
编辑: 由于您的问题稍后更新,我已经在评论中询问了您的JPQL查询。所以这个答案与JPQL有关,而不是标准查询。
您可以使用JPQL query
执行此操作。我假设你生成(你可以从your IDE
生成)或者创建一个名为Customer
的数据库实体类,它有成员
private String name;
private String gender;
private String state;
private Integer age;
private String city;
.... setters and getters
现在在persistent.xml
中添加类引用(如果不存在)。
<class>Customer</class> //if additional package exist then give the package name e.g com.test.Customer
现在进入查询部分。
Query q = entityManager.createQuery("SELECT c from Customer c where c.gender=:gender and c.state=:state and c.city=:city and c.age=:age");
q.setParameter("gender", "MALE");//Assume gender value is Male
q.setParameter("state", "Honululu");//Assume state value is Honululu
q.setParameter("city", "abc");//Assume city value is abc
q.setParameter("age", 10);//Assume age value is 10
Object resp = q.getResultList();
现在resp
对象包含您的数据。将对象转换为java.util.List
以获取数据。
您可以添加一些逻辑来组合您的查询。假设您有一个业务对象CustomerBO
实例cbo
。
if(cbo.getGender()!=null && !cbo.getGender().isEmpty()){
q.setParameter("gender", cbo.getGender());
}
and so many condition as your wish .....