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、大數據學習面試資料,請掃碼關注我的公眾號: