JPA 处理条件in的分页查询

第一种

时间:2018-11-13 17:17:47 提交 

Pageable pageable = PageRequest.of(pageQueryDto.getPage() - 1, pageQueryDto.getSize(), Sort.Direction.fromString(pageQueryDto.getDirection()), pageQueryDto.getProperty());
Page<Project> page = projectRepository.findAll((root, query, cb) -> {
    List<Predicate> list = new ArrayList<Predicate>();
    CriteriaBuilder.In<Long> in = cb.in(root.get("f").get("id"));
    for (F f : pageQueryDto.getList()) {
        in.value(f.getId());
    }
    list.add(in);
    Predicate[] p = new Predicate[list.size()];
    return cb.and(list.toArray(p));
}, pageable);

===2019年4月25日10:36:46 更新

第二种

Pageable pageable = PageRequest.of(pageQueryDto.getPage() - 1, pageQueryDto.getSize(), Sort.Direction.fromString(pageQueryDto.getDirection()), pageQueryDto.getProperty());
Page<Project> page = projectRepository.findAll((root, query, cb) -> {
    Predicate predicate = root.isNotNull();
    predicate = cb.and(predicate, cb.and(root.get("id").as(Long.class).in(pageQueryDto.getList())));
    return predicate;
}, pageable);

第三种

// pageQueryDto为入参 可以拿到数组信息
Pageable pageable = PageRequest.of(pageQueryDto.getPage() - 1, pageQueryDto.getSize(), Sort.Direction.fromString(pageQueryDto.getDirection()), pageQueryDto.getProperty());

Page<Project> page = projectRepository.findAll((root, query, cb) -> {
    Predicate predicate = root.isNotNull();
    CriteriaBuilder.In in = cb.in(root.get("id").as(Long.class));
	for (Long id : pageQueryDto.getList()) {
		in.value(id);
	}
	predicate = cb.and(predicate, in);
    return predicate;
}, pageable);

推荐第二种做法

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值