Ich denke, ich sollte hier auch antworten, weil ich vor eineinhalb Monaten angefangen habe, jooq zu benutzen, also habe ich einige Erfahrung damit.
Ich wollte ein Tool wie jooq verwenden, weil:
- ORM ist ein Overkill in meinem aktuellen Projekt (verteilte Berechnungsplattform für Cluster), da ich nur einzelne Felder aus der Datenbank lesen und schreiben muss, keine kompletten Tabellenzeilen, und einige meiner Abfragen sind komplex genug, um nicht von einfachen und leichtgewichtigen ORMs ausgeführt zu werden.
- Ich wollte, dass die Syntax für meine Abfragen automatisch vervollständigt wird, damit ich nicht meine gesamte DB im Kopf behalten muss
- Ich wollte in der Lage sein, Abfragen direkt in Java zu schreiben, damit der Compiler die grundlegende Abfragesyntax bei der Erstellung überprüfen kann.
- Ich wollte, dass meine Abfragen typsicher sind, damit ich nicht versehentlich eine Variable eines Typs übergeben kann, wo eine andere erwartet wird.
- Ich wollte SQL, aber ich wollte es sehr bequem und einfach zu benutzen
Nun, mit jooq konnte ich das alles erreichen. Meine Hauptanforderung war, dass jooq komplex genug ist, um Abfragen zu verarbeiten (verschachtelt, mit Gruppierung usw.). Das wurde erfüllt.
Ich wollte auch in der Lage sein, Abfragen mit so wenigen Codezeilen wie möglich auszuführen und konnte dies mit der jooq fluent API erreichen, die jquery-ähnliche Aufrufe zur Durchführung von SELECTs ermöglicht.
Auf dem Weg zur Nutzung von jooq habe ich eine ein oder zwei Fehler und ich muss sagen, dass sie erstaunlich schnell behoben wurden.
Ich habe auch einige Funktionen vermisst und wieder muss ich sagen, dass ich schon fast alle davon habe.
Was mir sehr gut gefallen hat, ist, dass jooq nun SLF4J verwendet, um einige sehr interessante Daten über seine Leistung zu melden und die eigentlichen Abfragen auszugeben. Das hat mir bei der Fehlersuche sehr geholfen.
Jooq generiert sogar Java-Artefakte für gespeicherte Prozeduren, UDFs und aktualisierbare Recordsets, die ich allerdings derzeit nicht verwende.
Was wichtig ist, jooq unterstützt transparent DB2, Derby, H2, HSQLDB, MySQL, Oracle, PostGreSQL, SQLite, SQL Server, Sybase SQL Anywhere. Eine ziemlich umfangreiche Liste, denke ich.
Jooq hat Support-Forum in Google-Gruppen wo Lukas Tag und Nacht bereit ist, selbst die dümmsten meiner Fragen zu beantworten.
Jooq unterstützt Maven und das ist eine große Erleichterung für mich, da alle meine Java-Projekte auf Maven basieren. Wir vermissen immer noch das Maven-Plugin für Generator, aber das ist nicht wichtig, da die Ausführung von Generator ein Kinderspiel ist.
Als ich meine Abfragen mit jooq schrieb, entdeckte ich plötzlich, dass sie wirklich portabel wurden, da ich fast nie ein MySQL-spezifisches Feature im Code verwendete, da jooq versucht, so portabel wie möglich zu sein. Für diejenigen, die mit solchen Eigenheiten nicht leben können, ist, wie ich weiß, auch die Unterstützung für SQL-Erweiterungen in Arbeit.
Was fehlt jooq aus meiner Sicht im Moment?
Nun, es gibt keine fließende API für andere Anweisungen als SELECT. Dadurch wird der Code etwas komplizierter und die Erstellung von UPDATE/DELETE-Anweisungen ist etwas schwieriger. Aber ich denke, dies wird bald hinzugefügt. Gerade in 1.5.9 implementiert! Ha! Zu schnell für mich ;)
Und noch eine Sache. Jooq hat ein gutes Handbuch, aber... ich weiß es nicht. Vielleicht verstehe ich die Struktur oder den Aufbau einfach nicht... Als ich Jooq zum ersten Mal benutzte, öffnete ich eine Seite nach der anderen auf der Suche nach einer Funktion, die ich brauche. Versuchen Sie zum Beispiel zu erraten, wo in jooq Handbuch UPDATE- und DELETE-Anweisungen werden beschrieben, wenn man den Inhalt betrachtet... Aber das ist wirklich subjektiv, glaube ich. Ich kann auch gar nicht erklären, was an der Anleitung aus meiner Sicht falsch ist. Wenn ich es kann, werde ich ein Ticket oder zwei posten ;)
Das Handbuch ist auch nicht wirklich gut navigierbar, da Trac keine automatischen "hier, dort und zurück"-ähnlichen Links hat.
Nun, für mich in Moskau (Russland) öffnen sich die Trac-Seiten auch nicht so schnell, so dass das Lesen des Handbuchs ein wenig langweilig ist.
Im Handbuch fehlt auch eine gute Beschreibung der Architektur von jooq für Mitwirkende. Jooq folgt dem "Design-by-Contract"-Prinzip, und als ich lernen wollte, wie eine bestimmte Funktion implementiert ist, indem ich in der IDE mit Strg-Klick auf einen Methodennamen klickte, landete ich in einer langweiligen Schnittstelle ohne Implementierung ;) Nicht, dass ich zu schlau wäre, um sofort mit der Verbesserung von jooq zu beginnen, aber es würde mir sicher gefallen zu verstehen, wie genau jooq von Grund auf aufgebaut ist.
Es ist auch schade, dass wir nicht zum Handbuch von jooq beitragen können. Ich hatte erwartet, dass es in einer Art Wiki zu finden ist.
Was ich außerdem verbessern möchte, ist die Art und Weise Nachrichten berichtet werden . Ich würde es vorziehen, wenn es einen Link zum Handbuch gäbe oder Beispiele, wie diese oder jene neue Funktion funktioniert.
Link zu den Versionshinweisen im Handbuch ist eigentlich nur ein Fahrplan. Ich denke, ich werde das morgen selbst machen...
Jooq hat derzeit auch eine relativ kleine Community, aber ich bin froh, dass sich das nicht auf die Codequalität oder die Art und Weise auswirkt, wie neue Funktionen eingeführt werden.
Jooq ist wirklich ein gutes Projekt. Ich werde mich auch bei meinen zukünftigen Projekten daran halten. Ich mag es wirklich.