首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

工具
EN

Stack Overflow用户
提问于 2008-12-06 20:23:58
回答 8查看 21.2K关注 0票数 40

会是一个有用的工具吗?我一直在开发一个工具,它允许Java对象映射到数据库中的一行。

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

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-12-06 20:31:27

LINQ很不错,但问题是语言集成。

Java没有任何像lambda表达式那样简洁的表达式,它们是LINQ的基石之一。我想他们可以在没有lambda表达式的普通Java之上添加查询表达式支持,方法是通过扩展创建匿名内部类--但这是非常可怕的。如果要执行类似LINQ的操作,还需要表达式树。

检查过的异常可能会妨碍我们,但我们得看看。等效的IQueryable需要有某种普通的检查异常--或者可能在元素类型和异常类型中都是通用的.

无论如何,考虑到Java社区在闭包方面遇到的麻烦,这一切都是空中楼阁,我认为早在2012年之前就指望Java中的LINQ这样的东西是愚蠢的。当然,这并不是说它在“类似Java”的语言中是不可能的。例如,Groovy已经有了一些有用的方面。

对于库端,Hibernate已经提供了LINQ许多特性的“非集成”版本。对于LINQ,您应该查看Google集合API --它有很多相同的东西(过滤、投影等)。当然,如果没有lambdas的话,使用起来要费时得多--但它仍然非常非常方便。(我在工作中一直使用Google集合代码,我不想回到“普通”Java集合。)

票数 63
EN

Stack Overflow用户

发布于 2009-11-11 07:32:03

值得注意的是Scala2.8将支持LINQ..。

实际上,standart集合在某种意义上提供了类似于LINQ的API。下面是一个例子:

代码语言:javascript
运行
复制
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").

不要害怕新的行点语法:您可以用简单的旧样式编写代码:

代码语言:javascript
运行
复制
Array(1,2,3,4,5,6).map(x => x*x)

还有许多项目提供了接近LINQ语法的功能.例如,从Squeryll获取的片段:

代码语言:javascript
运行
复制
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
票数 14
EN

Stack Overflow用户

发布于 2010-01-11 18:54:55

对于解决此问题的更一般方法,请考虑使用奎尔兹尔

它提供了LINQ风格的语法,支持JPA/Hibernate、JDO、SQL和后端。

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/346721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档