LINQ for java是一个有用的工具吗?我一直在研究一种允许Java对象映射到数据库中的行的工具.
这对Java程序员有用吗?
哪些功能有用?
Jon Skeet.. 63
LINQ for Java会很可爱,但问题在于语言集成.
Java没有像lambda表达式那样简洁,它们是LINQ的基石之一.我想他们可以在没有lambda表达式的情况下将查询表达式支持层叠在普通Java之上,通过使扩展创建匿名内部类 - 但它会非常可怕.如果你想做LINQ to SQL这样的事情,你还需要表达式树.
检查的异常可能会妨碍,但我们必须看到.IQueryable的等价物需要具有某种常规检查异常 - 或者可能在元素类型和异常类型中都是通用的......
无论如何,这都是天上掉馅饼 - 考虑到Java社区关闭的麻烦,我认为在2012年之前预期像Java中的LINQ这样的东西是愚蠢的.当然,这并不是说用"类似Java"的语言是不可能的.例如,Groovy已经有了一些有用的方面.
对于库方面,Hibernate已经提供了LINQ to SQL的许多功能的"非集成"版本.对于LINQ to Objects,您应该查看Google Java Collections API - 它有很多相同的东西(过滤,投影等).当然,如果没有lambdas,它的使用时间会非常繁琐 - 但它仍然非常,非常方便.(我在工作中一直使用Google Collections代码,我不想再回到"vanilla"Java集合.)
LINQ for Java会很可爱,但问题在于语言集成.
Java没有像lambda表达式那样简洁,它们是LINQ的基石之一.我想他们可以在没有lambda表达式的情况下将查询表达式支持层叠在普通Java之上,通过使扩展创建匿名内部类 - 但它会非常可怕.如果你想做LINQ to SQL这样的事情,你还需要表达式树.
检查的异常可能会妨碍,但我们必须看到.IQueryable的等价物需要具有某种常规检查异常 - 或者可能在元素类型和异常类型中都是通用的......
无论如何,这都是天上掉馅饼 - 考虑到Java社区关闭的麻烦,我认为在2012年之前预期像Java中的LINQ这样的东西是愚蠢的.当然,这并不是说用"类似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").
不要害怕新的line-dot语法:你可以用简单的旧式编写代码:
Array(1,2,3,4,5,6).map(x => x*x)
并且有许多项目提供接近LINQ-to-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
有关该问题的更一般方法,请考虑使用Querydsl.
它提供了LINQ样式的语法,支持JPA/Hibernate,JDO,SQL和Java Collection后端.
我是Querydsl的维护者,所以这个答案是有偏见的.