Kann @Bind mit Enums und anderen beliebigen Typen mit JDBI verwendet werden?

8

Unterstützt JDBI die Bindung von Aufzählungstypen über Anmerkungen?

Nehmen Sie beispielsweise ein DAO an, das eine Methode enthält:

%Vor%

Und, foo entspricht Foo.BAR , könnte ich eine Abfrage erwarten:

%Vor%

Wenn ja, wird toString() verwendet, um zu bestimmen, was substituiert ist?

Außerdem, erlaubt JDBI die Verwendung von @Bind mit einem beliebigen Typ, der Object erweitert? Und wieder, wenn ja, wird toString() verwendet?

    
vpiTriumph 29.04.2015, 19:33
quelle

2 Antworten

9

Nach dem Quellcode Enum.name() wird verwendet, nicht toString()

Wenn ein Objekt gebunden ist, verwendet jdbi setObject(Object object) des von Ihnen verwendeten jdbc-Treibers. Nach meiner Erfahrung mit PostgreSQL bindet es beispielsweise Map s an hstore und Arrays an postgreSQL array s, weil dies der jdbc-Treiber von PostgreSQL tut.

Wenn Sie eine bestimmte Art von Objekten auf eine bestimmte Art behandeln wollen, können Sie ArgumentFactory s implementieren (für die es keine Dokumentation gibt, sondern ein Beispiel hier in Stack Overflow ) oder BinderFactory (welches Ich habe gerade jetzt entdeckt.)

    
Natan 29.04.2015, 22:17
quelle
1

Um Ihre Frage "beliebige Typen" zu beantworten, können Sie eine BinderFactory an alles binden, was du willst.

%Vor%

Dies ist besonders nützlich, wenn Sie komplexe Typen haben, die auf eine bestimmte Weise gespeichert werden sollen, z. Binärdaten oder Sammlungen, die in CSVs umgewandelt oder nur in separaten Zuordnungstabellen gespeichert werden sollen. Dann verwendest du deinen neuen Fancy Binder so:

%Vor%

Sie können auch eine @BindBean Annotation verwenden, die automatisch nach Feldern eines Objekts durch den Bind-Parameternamen sucht (z. B. kann sie einen Abfrage-Platzhalter ":userId" der Methode getUserId() zuordnen).

    
Patrick M 23.06.2015 15:19
quelle

Tags und Links