繁体   English   中英

使用Java 8 Streams的Spring Data JPA存储库

[英]Spring Data JPA Repositories with Java 8 Streams

假设我有以下存储库:

public interface UserRepository extends JpaRepository<User, Long> {

    @Query("select u from User u")
    Stream<User> streamAllPaged(Pageable pageable);
}

我想进行搜索:

public Page<User> findAllUsers(Pageable page) {

    Page<User> page = null;
    try (Stream<User> users = userRepository.streamAllPaged(page)) {
            Set<User> users = users.filter(u -> user.getName().equals("foo"))
                    .collect(Collectors.toSet());
            //create page from set?
    }

}

显然我可以使用子列表并手动插入页面大小等但我想应该有更“标准”的方法来做到这一点?

我认为你的用例在这里没有多大意义。 如果你想最终得到一个结果Page ,那么从Stream开始效率很低。 您可以通过以下方式轻松实现预期的最终结果:

public interface UserRepository extends CrudRepository<User, Long> {

  Page<User> findByName(String name, Pageable pageable);
}

这样可以确保只读取您最初请求的名称数量。 在这里使用Stream完全颠覆了这一点,因为对Stream过滤将要求将所有 User实例加载到内存中以调用谓词。 您肯定希望让数据库执行此操作,只返回首先匹配的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM