gpt4 book ai didi

java - Spring Data 中 IQueryable 的等价物

转载 作者:行者123 更新时间:2023-11-30 06:55:51 25 4
gpt4 key购买 nike

我习惯了 .Net 和 LINQtoEntities,尤其是 IQueryable 部分,它允许在获取结果之前通过不同的函数进行请求。

spring 数据中有这样的东西吗?或者任何其他 Java ORM?

我希望能够做的事情的基本示例:

private IQueryable<Todo> GetAll(){
context.Todos.Where(t => !t.Deleted);
}

public IEnumerable<Todo> GetDoneTodos(){
GetAll().Where(t => t.Done).ToList();
}

最佳答案

您可以使用 Spring Data 的 QueryDSL 集成。基本上,您在存储库界面中扩展 QueryDslPredicateExecutor 并添加一个 findAll 方法来获取 QueryDSL Predicate 并根据它过滤所有结果谓词。假设我们有域对象,比如 Greeting,那么我们会有这样的存储库:

public interface GreetingRepository extends QueryDslPredicateExecutor<Greeting> {}

然后您可以使用 QueryDSL 生成的 QModel 创建一个 Predicate 并将其传递给我们的 greetingRepository。假设我们要过滤一个特定用户的所有 Greeting:

Predicate filterByUser = greeting.user.eq(someUser);
greetingRepository.findAll(filterByUser);

greeting 是 QueryDSL 基于我们的 Greeting 模型生成的元模型

注意 1:您可以看到如何集成 Spring Data 和 QueryDSL here并查看 QueryDSL 的 Predicate 的更多示例 here .

注意2:QueryDslPredicateExecutor还提供了findOne(Predicate predicate)count(Predicate predicate)exists(Predicate predicate) 当然,这些方法很有用且一目了然。

注意 3:您可以使用 Specification 实现几乎相同的事情,但在我看来,QueryDSL 具有更优雅和可读性更好的 Predicate

关于java - Spring Data 中 IQueryable 的等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34862757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com