Kann ich verwenden MyBatis zu generieren Dynamische SQL-ohne es auszuführen?
Ich habe einige komplexe Abfragen zu erstellen mit einer Reihe von optionalen filtern, für die MyBatis scheint wie ein Idealer Kandidat für die Generierung von dynamischen SQL.
Jedoch, möchte ich noch meine Abfrage ausführen, die in dem gleichen Rahmen wie der rest der Anwendung (die nicht mit MyBatis).
So, was ich hoffte zu verwenden MyBatis ausschließlich für die Generierung der SQL, aber von dort aus mit dem rest meiner app tatsächlich auszuführen. Ist das möglich? Wenn ja, wie?
InformationsquelleAutor Ray | 2012-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl MyBatis wurde entwickelt, um die Abfrage ausführen, nachdem Sie baut, können Sie Gebrauch machen von es, die Konfiguration und ein wenig "Insider-wissen" zu bekommen, was Sie brauchen.
MyBatis ist ein sehr schöner Rahmen, leider fehlt es an den Dokumentationen Seite, so dass der source-code ist Ihr Freund. Wenn Sie Graben, um, sollten Sie die Beule in folgenden Klassen:
org.apache.ibatis.mapping.MappedStatement
undorg.apache.ibatis.mapping.BoundSql
Schlüssel die Spieler werden in die dynamic SQL. Hier ist ein basic Beispiel:MySQL-Tabelle
user
mit diesen Daten in es:User
Klasse:UserService
Schnittstelle:UserService.xml
- mapper-Datei:sqlmap-config.file
:AppTester
zu zeigen das Ergebnis:Und das Ergebnis:
?
anstelle des tatsächlichen Wertes. z.B.where login = ?
. jede Arbeit, um auf diesem ? vielen Dank (ich bin nicht mit mapper-Klasse)InformationsquelleAutor Bogdan
Jeder weiß, wie BoundSql.getSql (), um eine paramaterized query-string aus MyBatis, wie diese:
Aber jetzt müssen Sie die andere Hälfte der Gleichung, die Liste der Werte, die entsprechen zu den Fragezeichen:
Nun können Sie serialisieren, Sie zu senden, um an anderer Stelle ausgeführt werden, oder Sie drucken es sich um ein Protokoll, so können Sie Nähen Sie zusammen, und führen Sie die Abfrage manuell.
*code nicht getestet, könnte sein, kleinere Art-Probleme oder ähnliches
InformationsquelleAutor chad
Nur um Bogdan die richtige Antwort: Sie brauchen, um passieren eine JavaBean zu
getBoundSql()
mit getter ' s für die Schnittstellen-Parameter, wenn Sie die Schnittstelle hat eine komplexere Signatur.Nehmen wir an, Sie möchten eine Abfrage der Benutzer basierend auf der login-Nummer und/oder den Benutzernamen. Dein interface könnte wie folgt Aussehen:
Ich gehe aus der Mapper-code, da es irrelevant für diese Diskussion, aber dein code in AppTester werden sollte:
InformationsquelleAutor Stefan Haberl