Quaere:Java 上的 LINQ

  • Rob Thornton
  • 高昂

2007 年 9 月 24 日

话题:Java语言 & 开发

在上周的 JavaZone 大会上,Anders Noras介绍Quaere 库,他这个库比喻成 Java 上的 LINQ。Quaere 是一门 DSL,任何实现了 Iterable 或其 Queryable 接口的结构,Quaere 都能提供查询功能。

Noras 列出的 Quaere 特性如下:

  • 可对数组或实现 Iterable 接口的数据结构执行查询。
  • 内部 DSL(以静态引用和连贯接口 [Fluent Interface] 为基础)将查询语句整合在常规 Java 代码中。DSL 不需要任何预处理或代码生成步骤。仅需要引用 quaere.jar 文件及其依赖项。
  • 大量的查询操作,包括 restriction、selection、projection、set、partitioning、grouping、ordering、 quantification、aggregation 以及 conversion 等操作。
  • 支持 lambda 表达式。
  • 支持动态定义和实例化匿名类。
  • 给 Java 1.5 及其后续版本增加了很多新“关键字”。

下例从一个从产品列表中得到产品名称的列表:

List products = Arrays.asList(Product.getAllProducts()); 

Iterable productNames =

from("p").in(products).

select("p.getProductName()");

Quaere 目前只完成了一个针对对象的具体实现,还有一个针对 Hibernate 的实现正在进行中。Hibernate 的实现(以及其他具有良好的查询 API 的框架)应该进展得很快,Anders 说,因为完成 Hibernate 的示例程序才花了几个小时。

一部分人认为joSQL也是与 Quaere 类似的 API。Anders认同两者存在相似之处,但是也指出一些显著的差异:

  • Quaere 对于“业务问题”的处理具有更好的内聚力
  • Quaere 查询更加紧凑并且具有类型安全的特性
  • Quaere 是一种可扩充语言,可以无缝地添加新的查询引擎

在讲座的最后,Noras 回答了关于 Quaere 的一些常见疑问。他已经在 Codehaus 上为 Quaere 建立了一个项目

查看英文原文:Quaere: LINQ Arrives for Java
Java语言 & 开发