ps:修改公司的老项目,突然要用到这个知识点,但是自己查到的这方面的文章太少了,就自己总结了一份,亲测正确!
@Override
public Page<UserInfoDTO> UserListByConditions(QueryInfoDTO queryInfoDTO, Integer page, Integer limit) {
Pageable pageable = PageRequest.of(page - 1, limit, Sort.Direction.DESC,"showOrder");
Specification<UserInfo> spec = new Specification<UserInfo>() {
@Override
public Predicate toPredicate(Root<UserInfo> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
List<Predicate> list = new ArrayList<Predicate>();
if (StringUtils.isNotBlank(queryInfoDTO.getUserId())){
//root.get("channelId")表示获取channelId这个字段名称
list.add(criteriaBuilder.equal(root.get("UserId").as(String.class), queryInfoDTO.getUserId()));
}
if (StringUtils.isNotBlank(queryInfoDTO.getUserName())){
//like表示执行like查询,%...%表示值
list.add(criteriaBuilder.like(root.get("UserlName").as(String.class), "%" + queryInfoDTO.getContent() + "%"));
}
List<String> userIds = new ArrayList<>();
userIds.add(",1,");
userIds.add(",2,");
userIds.add(",3,");
userIds.add(",4,");
list.add(criteriaBuilder.in(root.get("userId")).value(userIds ));
Predicate[] p = new Predicate[list.size()];
//将多个查询条件联合起来之后,返回Predicate对象
return criteriaBuilder.and(list.toArray(p));
}
};
Page<UserInfo> entitys = userInfoRepository.findAll(spec, pageable);
Page<UserInfoDTO> dtos = new PageImpl<>(convertUserInfoEntityToDTOs(entitys.getContent()), pageable, entitys.getTotalElements() );
return dtos;
}
重点关注
list.add(criteriaBuilder.in(root.get("userId")).value(userIds ));
如果用到in,value()的参数必须是集合。
题。