繁体   English   中英

Java Apache Olingo 是否查询数据库本身?

[英]Does Java Apache Olingo query the database itself?

在 .NET C# 中,我们使用 Odata 对来自 SQL 数据库的数据库结果进行过滤、分页、排序。 Odata in .NET would actually go into the database, and query WHERE, ORDER By Filters to database, instead of extracting all the database results, and applying filtering on the api memory.

我对 Java Apache Olingo 很好奇,在内部查询数据库或对 API ZCD69178Z33D 组应用过滤。

资源:

https://www.odata.org/libraries/

https://www.odata.org/documentation/odata-version-2-0/uri-conventions/

根据这个分析:

只要您的数据提供程序支持延迟查询并且您不通过调用类似.ToList() 的方式强制评估,则在应用 OData 过滤器之前不会评估查询,并且它们将在数据库级别进行处理。

简短的回答,Olingo 2 JPAProcessor 将查询数据库以仅获取有限的数据,即指定了 $filter 和 $orderby。

TLDR;

这里有两件事我们需要考虑。 Apache Olingo 是一个框架,它允许人们在 Java 中实现 OData 服务器和客户端,如果只为您提供您实现OdataProcessors的抽象类和接口,无论您想要什么。

现在来到第二点,Olingo 项目中也提供了 JPA 实现,您可以在此处找到

为了回答你的问题,让我们深入研究这个项目的代码,看看它是如何实现的

我们必须从JPAProcessorImpl开始并跳到process(final GetEntitySetUriInfo uriParserResultView)这是实现查询和如何在数据库中获取数据的实际情况的地方。

在第 150 行,实际查询已经构建,因此如果您传递$filter (where 子句)和$orderby ,我们可以看到这些值实际上正在传递到数据库并在查询中烘焙

Olingo 调试屏幕截图

暂无
暂无

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

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