LINQ for Java工具

Mil*_*ous 40 java mysql sql linq

LINQ for java是一个有用的工具吗?我一直在研究一种允许Java对象映射到数据库中的行的工具.

  1. 这对Java程序员有用吗?
  2. 哪些功能有用?

Jon*_*eet 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集合.)

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

Ste*_*hen 14

值得注意的是,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").
Run Code Online (Sandbox Code Playgroud)

不要害怕新的line-dot语法:你可以用简单的旧式编写代码:

Array(1,2,3,4,5,6).map(x => x*x)
Run Code Online (Sandbox Code Playgroud)

并且有许多项目提供接近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
Run Code Online (Sandbox Code Playgroud)


Tim*_*per 8

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

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

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