Jpa的criteriaBuilder.in 使用

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、大数据学习面试资料,请扫码关注我的公众号:

 

Jpa的criteriaBuilder.in 使用

 

上一篇:函数式接口


下一篇:supplier、consumer、funtion、predicate接口的Lambda操作