40 votes

Outil LINQ for Java

Un LINQ pour Java serait-il un outil utile? Je travaille sur un outil qui permettra à un objet Java de mapper une ligne dans une base de données.

  1. Cela serait-il utile pour les programmeurs Java?
  2. Quelles fonctionnalités seraient utiles?

63voto

Jon Skeet Points 692016

LINQ pour Java serait belle, mais le problème, c'est la langue de l'intégration.

Java n'a rien d'aussi concis que les expressions lambda, et ils sont l'un des bedrocks de LINQ. Je suppose qu'ils pourraient calque de l'expression de la requête de support sur le dessus de la normale Java sans expressions lambda, en faisant de l'extension à créer les classes internes anonymes - mais il serait assez hideux. Vous auriez également besoin d'expression des arbres, si vous vouliez faire quelque chose comme LINQ to SQL.

Checked exceptions pourraient obtenir de la manière, mais il nous faudrait voir. L'équivalent de IQueryable aurait besoin d'avoir une sorte de général vérifié exception - ou peut-être il pourrait être générique à la fois le type de l'élément et le type d'exception...

De toute façon, c'est tout à tarte-dans-le-ciel - compte tenu des difficultés de la communauté Java est d'avoir avec fermetures, je pense qu'il serait de la folie de s'attendre à quelque chose comme LINQ en Java lui-même plus tôt que sur l'année 2012. Bien sûr, cela ne veut pas dire qu'il ne serait pas possible dans un "Java" comme de la langue. Groovy a certains aspects utiles déjà, par exemple.

Pour la bibliothèque côté, Hibernate fournit déjà un "non intégrée" version d'un grand nombre des fonctionnalités de LINQ to SQL. LINQ to Objects, vous devriez regarder la Google Java Collections API - c'est beaucoup de le même genre de chose (filtrage, projection, etc). Sans lambdas c'est beaucoup fiddlier à utiliser, bien sûr - mais il est encore vraiment, vraiment pratique. (J'utilise Google Collections de code tout le temps au travail, et j'avais hate de revenir à la "vanille" Java collections.)

14voto

Stephen Points 8670

Il est intéressant de noter que Scala 2.8 va avoir le support LINQ...


En fait, scala standart collections de fournir des API travaille comme LINQ-pour-les Objets dans un certain sens. Voici l'exemple:

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").

Ne pas avoir peur de la nouvelle ligne de la syntaxe à point: vous pouvez écrire du code dans la plaine old style:

Array(1,2,3,4,5,6).map(x => x*x)

Et il y a un certain nombre de projets qui fournissent près de LINQ-to-SQL syntaxe. Par exemple, extrait de 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

8voto

Timo Westkämper Points 7950

Pour une approche plus générale du problème, envisagez d’utiliser Querydsl .

Il fournit une syntaxe de style LINQ avec prise en charge des moteurs JPA / Hibernate, JDO, SQL et Java Collection.

Je suis le responsable de Querydsl, cette réponse est donc biaisée.

4voto

Konstantin Triger Points 111

Une solution plus semblable à C # est http://code.google.com/p/jaque . Il comporte à la fois une fonctionnalité linq-to-object et un modèle de fournisseur avec une API très similaire à MS LINQ. Un simple fournisseur JPA (Hibernate) est implémenté. Une fois que Java aura été fermé ( http://blogs.oracle.com/mr/entry/closures ), il sera également élégant.

1voto

yrcjaya Points 180

Hibernate utilise HQL. Vous pouvez faire un objet mais seulement pour des bases de données relationnelles

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X