LINQ für Java?
Geschrieben von: Markus Junginger in Java, tags: .NET, C#, C# 3.0, LINQ, LINQ for JavaDerzeit beschäftige ich mich neben Java auch unter anderem mit C# und .NET. Die Sprache Java wird ja eher konservativ und evolutionär weiterentwickelt (es gibt ja eine große Zahl an Entwicklern und Applikationen). Anders bei C# das seit seiner Entstehung als Java Clone schon mal größere Sprünge gemacht hat. Eine solcher ist definitiv LINQ, eine Spracherweiterung für Abfragen (Language-Integrated Query). Damit lassen SQL ähnliche Abfragen direkt in C# (ab Version 3.0) auszudrücken. OK, netter Syntax-Zucker für relationale Datenbanken, aber das wirklich spannende an LINQ ist, dass beispielsweise auch XML und Objektgraphen auf diese Weise angesprochen werden können. Tatsächlich hat man von der Implementierung abstrahiert, so dass man für praktisch alle Datenquellen einen LINQ Aufsatz bauen könnte (LDAP, SAP, Dateisystem, Webservices, etc.).
Ein Beispiel für LINQ (aus 101 LINQ Samples):
1 2 3 4 5 6 7 8 9 10 11 12 13 | public void Linq2() { List products = GetProductList(); var soldOutProducts = from p in products where p.UnitsInStock == 0 select p; Console.WriteLine("Sold out products:"); foreach (var product in soldOutProducts) { Console.WriteLine("{0} is sold out!", product.ProductName); } } |
Beeindruckt? Ich geb’s zu: LINQ hat mich spontan begeistert. Carl Rosenberger ging es wohl ähnlich, denn er möchte LINQ für Java portieren und hat auch schon eine Google Group dazu eröffnet. Es ist geplant “LINQ for Java” als Open Source Projekt ins Leben zu rufen und für die Standardisierung zu sorgen. Der geplante JSR ist sicher ein tollkühnes Ziel, insbesondere wenn man sieht wie schwer sich Java schon mit Closures tut. Aber allemal ein interessantes Projekt!



Einträge (RSS)
Über sowas bin ich in der Art auch schonmal gestolpert. Wer sich dafür interessiert, sollte mal etwas mit JoSQL rumspielen.
Homepage: http://josql.sourceforge.net/
Und ne kleine zusammenfassung gibts unter: http://www.tutego.com/blog/javainsel/2007/11/sql-fr-objekte-josql-sql-for-java.html
Im Unterschied zu Linq müssen die Queries aber in Textform vorliegen, entsprechend wie bei EJBQL.
hört sich für mich nach JLINQ aka pureQuery an?
JoSQL, und pureQuery sind auch interessante Technologien. Auch schön sind Criteria APIs wie sie beispielsweise Hibernate hat und für JPA 2.0 angedacht ist.
LINQ hat aber als Bestandteil der Sprache zusätzliche Vorteile, die mit der statischen Typisierung zusammenhängen:
- Prüfung zur Compile-Time
- Automatisches Vervollständigen in der IDE
- Refactoring-fähig
Vielleicht wäre Scala ein besserer Kandidat wenn es darum geht, LINQ wirklich als first-class Sprachbestandteil umzusetzen. Bei Java sehe ich das nicht kommen. Einen Precompiler für Java könnte man machen, aber richtig schön ist das auch nicht.
kleines Beispiel:
http://bartulovic.com/wordpress/?p=94
C# ist nicht Java Clone
Wenn man sich die Anfänge von C# anschaut bin ich schon der Meinung, dass Microsoft sich durchaus stark an Java orientiert hat. Sowohl von der Sprache als auch von der API her. Inzwischen hat sich das Verhältnis natürlich stark verändert und Microsoft hat C# viele neue Features spendiert, während Sun sich mit Java eher konservativ gibt.
Hier ist ein weiters Beispiel für LINQ for Java : http://source.mysema.com/display/querydsl/Querydsl
Querydsl unterstützt JPA/Hibernate, JDO, SQL und Java Collections.