当前位置:  开发笔记 > 编程语言 > 正文

LINQ for Java工具

如何解决《LINQforJava工具》经验,为你挑选了3个好方法。

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集合.)



1> Jon Skeet..:

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集合.)


@Claudiu:几个提案,其中没有一个完全令人满意.最后我听说由于讨论太多,它甚至不太可能进入Java 7.这是Java如此民主的缺点.

2> Stephen..:

值得注意的是,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



3> Timo Westkäm..:

有关该问题的更一般方法,请考虑使用Querydsl.

它提供了LINQ样式的语法,支持JPA/Hibernate,JDO,SQL和Java Collection后端.

我是Querydsl的维护者,所以这个答案是有偏见的.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有