我习惯了 .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数据QueryDSL一体化。基本上,您扩展了QueryDslPredicateExecutor
在您的存储库界面中,它添加了一个findAll
获取 QueryDSL 的方法Predicate
并据此过滤所有结果Predicate
。假设我们有域对象,比如说Greeting
,那么我们就会有这样的存储库:
public interface GreetingRepository extends QueryDslPredicateExecutor<Greeting> {}
然后就可以使用生成的QModel
由 QueryDSL 生成以创建Predicate
并将其传递给我们的greetingRepository
。假设我们要过滤所有Greeting
由一位特定用户执行:
Predicate filterByUser = greeting.user.eq(someUser);
greetingRepository.findAll(filterByUser);
greeting
is a 元模型由 QueryDSL 根据我们的Greeting
model.
Note 1:您可以看到如何集成 Spring Data 和 QueryDSL并查看 QueryDSL 的更多示例Predicate
s here http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#jpa_integration.
Note 2: QueryDslPredicateExecutor
还提供findOne(Predicate predicate)
, count(Predicate predicate)
and exists(Predicate predicate)
当然,这些方法是有用且不言自明的。
Note 3: 你可以实现几乎同样的事情Specification
但我认为 QueryDSL 更优雅、更易读Predicate
s.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)