Spring 数据中 IQueryable 的等价物
Equivalent of IQueryable in Spring Data
我习惯了 .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
并根据该 Predicate
过滤所有结果。假设我们有域对象,比如说 Greeting
,那么我们会有这样的存储库:
public interface GreetingRepository extends QueryDslPredicateExecutor<Greeting> {}
然后你可以使用QueryDSL生成的QModel
s来创建一个Predicate
并传递给我们的greetingRepository
。假设我们要按一个特定用户过滤所有 Greeting
:
Predicate filterByUser = greeting.user.eq(someUser);
greetingRepository.findAll(filterByUser);
greeting
是 QueryDSL 基于我们的 Greeting
模型生成的 元模型 。
注释 1:您可以看到如何集成 Spring 数据和 QueryDSL here and see more examples for QueryDSL's Predicate
s here.
注2:QueryDslPredicateExecutor
也提供了findOne(Predicate predicate)
,count(Predicate predicate)
,exists(Predicate predicate)
方法,self-explanatory,当然。
注释 3:您可以使用 Specification
实现几乎相同的结果,但在我看来,QueryDSL 具有更优雅和可读性更好的 Predicate
。
我习惯了 .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
并根据该 Predicate
过滤所有结果。假设我们有域对象,比如说 Greeting
,那么我们会有这样的存储库:
public interface GreetingRepository extends QueryDslPredicateExecutor<Greeting> {}
然后你可以使用QueryDSL生成的QModel
s来创建一个Predicate
并传递给我们的greetingRepository
。假设我们要按一个特定用户过滤所有 Greeting
:
Predicate filterByUser = greeting.user.eq(someUser);
greetingRepository.findAll(filterByUser);
greeting
是 QueryDSL 基于我们的 Greeting
模型生成的 元模型 。
注释 1:您可以看到如何集成 Spring 数据和 QueryDSL here and see more examples for QueryDSL's Predicate
s here.
注2:QueryDslPredicateExecutor
也提供了findOne(Predicate predicate)
,count(Predicate predicate)
,exists(Predicate predicate)
方法,self-explanatory,当然。
注释 3:您可以使用 Specification
实现几乎相同的结果,但在我看来,QueryDSL 具有更优雅和可读性更好的 Predicate
。