【发布时间】:2019-10-15 08:46:38
【问题描述】:
我有这个代码,它只适用于输入输入字符串的一个单词。但我想进行组合搜索。例如,我想写family和name,我想和同时拥有这个名字和family的人有结果。
@Override
public List<Teacher> searchByString(String str) {
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Teacher> criteriaQuery = criteriaBuilder.createQuery(Teacher.class);
Root<Teacher> TeacherRoot = criteriaQuery.from(Teacher.class);
Predicate predicateForName
= criteriaBuilder.like(criteriaBuilder.lower(TeacherRoot.get("name")), "%" + str.toLowerCase() + "%");
Predicate predicateForFam
= criteriaBuilder.like(criteriaBuilder.lower(TeacherRoot.get("fam")), "%" + str.toLowerCase() + "%");
Predicate predicateForOtch
= criteriaBuilder.like(criteriaBuilder.lower(TeacherRoot.get("otch")), "%" + str.toLowerCase() + "%");
Predicate predicateForPhone
= criteriaBuilder.like(TeacherRoot.get("phoneNumber"), "%" + str + "%");
Predicate predicateForDate
= criteriaBuilder.like(TeacherRoot.get("dateOfBirth").as(String.class), "%" + str + "%");
Predicate predicateFinal = criteriaBuilder.or(
predicateForName,
predicateForFam,
predicateForOtch,
predicateForPhone,
predicateForDate);
criteriaQuery.where(predicateFinal);
return em.createQuery(criteriaQuery).getResultList();
}
样本数据:
1 John Newman London 8-999990999
2 John Malkovich Paris 8-999995999
3 John NewMan Moscow 8-999995999
输入字符串:John Newman
结果记录:
1 John Newman London 8-999990999
3 John NewMan Moscow 8-999995999
输入字符串:John 5(姓名为 John 且电话号码为 5 的记录)
结果记录:
2 John Malkovich Paris 8-999995999
3 John NewMan Moscow 8-999995999
查询的组合可以不同。
【问题讨论】:
标签: hibernate jpa search dao criteria-api