LINQ for Java 工具 [已关闭]
用于 java 的 LINQ 会是一个有用的工具吗?我一直在研究一种工具,该工具将允许Java对象映射到数据库中的行。
- 这对Java程序员有用吗?
- 哪些功能会有用?
用于 java 的 LINQ 会是一个有用的工具吗?我一直在研究一种工具,该工具将允许Java对象映射到数据库中的行。
LINQ for Java 会很可爱,但问题是语言集成。
Java没有像lambda表达式那样简洁的东西,它们是LINQ的基石之一。我想他们可以通过使扩展创建匿名内部类,在没有lambda表达式的普通Java之上分层查询表达式支持 - 但这将是非常可怕的。如果你想做任何类似 LINQ to SQL 的操作,你还需要表达式树。
检查的异常可能会妨碍,但我们必须看看。IQueryable的等效物需要具有某种常规检查异常 - 或者它可能在元素类型和异常类型中都是通用的...
无论如何,这都是天上掉馅饼 - 考虑到Java社区在闭包方面遇到的麻烦,我认为在Java本身中更早地期望像LINQ这样的东西是在2012年左右是愚蠢的。当然,这并不是说这在“类似Java”的语言中是不可能的。例如,Groovy已经具有某些有用的方面。
对于库端,Hibernate已经提供了LINQ to SQL的许多功能的“非集成”版本。对于LINQ to Objects,你应该看看Google Java Collections API - 它有很多相同的东西(过滤,投影等)。当然,如果没有lambdas,使用起来会更加麻烦 - 但它仍然非常非常方便。(我在工作中一直使用Google Collections代码,我不想回到“vanilla”Java集合。
值得注意的是,Scala 2.8 将支持 LINQ...
实际上,scala 标准集合提供的 API 在某种意义上类似于 LINQ-for-Objects。下面是一个示例:
List("Paris","Berlin","London","Tokyo")
.filter(c => c.endsWith("n"))
.map(c => c.length)
// result would be length of the words that ends
// with "n" letter ("Berlin" and "London").
不要害怕新行点语法:你可以用普通的旧风格编写代码:
Array(1,2,3,4,5,6).map(x => x*x)
还有许多项目提供了接近 LINQ 到 SQL 的语法。例如,从Squeryll获取的片段:
import Library._
using(session) {
books.insert(new Author(1, "Michel","Folco"))
val a = from(authors)(a=> where(a.lastName === "Folco") select(a))
}
// but note that there is more code behind this example