Criteria意为“标准、准则”,在数据库中翻译为“查询条件”,所以CriteriaBuider就是Java提供的、用来生成查询条件的“标准生成器”。
Criteria的in方法对应SOL语句中的IN关键字。
比如:
select * from t_olympic_staiums y where y.id in (1,2,3,4,5)
网上查询到例子为:
List<Predicate> predicates = new ArrayList<>(); if(companyEntities != null && companyEntities.size()>0){ Path<Object> path = root.get("maintainUnitId"); //定义查询的字段 CriteriaBuilder.In<Object> in = criteriaBuilder.in(path); for (int i = 0; i <companyEntities.size() ; i++) { in.value(companyEntities.get(i).getId());//存入值 } predicates.add(criteriaBuilder.and(criteriaBuilder.and(in)));//存入条件集合里
注意:使用buider构建一个in的查询规则,in()的参数是被查询的对象中的某个属性(比如学生的班级)
实际开发中使用:
/** * 字符串类型模糊查询示例: * Predicate predicate = cb.like(root.get("employeeName"), "%" + 三 + "%"); 查询名字中含有“三”的员工 * 数字类型or时间类型示例: * Predicate predicate = cb.equal(root.get("age"), 26); 查询年龄为26的员工 * Predicate predicate = cb.ge(root.get("age"), 26); 查询年龄大于26的员工 同理大于等于为gt * Predicate predicate = cb.le(root.get("age"), 26); 查询年龄小于26的员工 同理小于等于为lt * Predicate predicate = cb.between(root.get("age"), 26, 30);查询年龄在26与30之间的员工 * 若查询条件为时间类型,需用DateTimeConverter类的toDate方法将条件转换为对应的日期类型,然后进行查询 * 例如:Date date = (Date) DateTimeConverter.toDate(Date.class, queryFilter.getValue()); Predicate predicate = cb.equal(namePath, date); * @queryCommon:查询方法(通用的) * @param queryCondition 查询条件 * @return QueryResultObject 查询结果 */ public Predicate toPredicate(Root<TStadiumsLoad> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> preList = new ArrayList<Predicate>(); if(qList != null && !qList.isEmpty()){ for(QueryFilter queryFilter : qList){ Path<String> namePath = root.get(queryFilter.getFieldName()); Predicate predicate =null; if(queryFilter.getFieldName().equals("stationRoom") ){ predicate = cb.like(namePath, "%" + queryFilter.getValue() + "%"); }else if(queryFilter.getFieldName().equals("stadiumId")){ String olympicName = (String) queryFilter.getValue();//国家体育 List list=tOlympicStadiumsMapper.findOlympicStadiumIdByName(olympicName);//查询名称为国家体育的所有id CriteriaBuilder.In<String> in = cb.in(namePath); for (int i = 0; i < list.size(); i++) { Map map=(Map)list.get(i); String stadiumId=map.get("stadiumId").toString(); in.value(stadiumId); } predicate = cb.and(cb.and(in)); }else{ predicate = cb.equal(namePath, queryFilter.getValue()); } preList.add(predicate); } query.where(preList.toArray(new Predicate[preList.size()])); } preList.clear(); return null; }
更多java、大数据学习面试资料,请扫码关注我的公众号: