Ibatis: Abhängigkeiten zwisch den den DAOs?

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Hi,

mal ne kleine Frage:

Kann ich ein DAO mit einem weiteren Verknüpfen?

Beispiel:

Code:
[
Customer:

int: id;
String: name;
BankAccount: bankAccount;
]

[BankAccount
int id;
String abc;
...
String xyz;
]

Oder muss ich das so machen, dass "Customer" nur die ID zu "bankAccount" hat und dann in einer "getBankAccount" Methode anhand der ID den zugehörigen "BankAccount" nachladen?

Hat hier jmd. mal ein "best practice" Beispiel für mich (egal ob 2.x oder 3.x)?

Gruß
Alex
 
M

maki

Gast
Ohne iBati 3 zu kennen, würde ich sagen ja :)

Man kann entweder Mapped Statements direkt aufrufen (gut finde ich es den namespace zu nutzen), oder ein Dao ein anderes nutzen lassen.

In den ResultMaps selbst (also die XML Dateien in iBatis 2.x) kann man angeben, ob eine andere Resultmap für ein Feld verwendet werden soll, oder gar ein Statement das mit Werten (zB. ID) aus der aktuellen Query ausgeführt werden soll.
 
T

tuxedo

Gast
In den ResultMaps selbst (also die XML Dateien in iBatis 2.x) kann man angeben, ob eine andere Resultmap für ein Feld verwendet werden soll, oder gar ein Statement das mit Werten (zB. ID) aus der aktuellen Query ausgeführt werden soll.

Ah, okay. D.h. wenn ich "Customer" lade, dann kann ich in dessen SQL-Mapping eintragen, dass er "BankAccount" gleich mitlädt, passend zur ID von "Customer".

Gut. Das wäre das "direkte" Laden.

Ist diese vorgehensweise gängige Praxis? Was ist wenn ich recht viele solcher abhängigkeiten habe. Ist dann "LazyLoading" nicht geschickter? Wo würde man das dann umsetzen? Mein erster Ansatz wäre im DAO in einer getter-Methode selbst. Sprich: Ich hole mir "Customer", der wird mit all seinen Werten aus seiner Tabelle befüllt (also auch mit der ID des "BankAccount"). Und im Customer-Objekt habe ich dann eine "getBankAccount" Methode die die bereits geladene ID nimmt und damit das BankAccount Objekt "holt".

Oder kann iBatis das irgendwie selbst? Hibernate hat AFAIK sowas drin...

Gruß
Alex
 
M

maki

Gast
iBatis ist kein ORM, eher eine Vorstufe, aber man kann mit iBatis sein eigenes ORM schreiben ;)

Alle Mappings sowie so was wie "LazyLoad" etc. müsste man selber implementieren.

Man kann die Mapped Satetments und die Resultmaps wiederverwenden, bei Statements kann man sie sogar runterbrechen auf wieder verwendbare Teile (Fragments).

Denke ein "transparentes" lazyload wäre schwer umzusetzen, zumindest kenne ich nix in iBatis2 dass das unterstützen würde.

Mein erster Ansatz wäre im DAO in einer getter-Methode selbst. Sprich: Ich hole mir "Customer", der wird mit all seinen Werten aus seiner Tabelle befüllt (also auch mit der ID des "BankAccount"). Und im Customer-Objekt habe ich dann eine "getBankAccount" Methode die die bereits geladene ID nimmt und damit das BankAccount Objekt "holt".
Das geht natürlich, wobei es dann auch sehr langsam wird, wenn bei Customer immer der Account gebraucht & nachgeladen wird.

Persönlich nutze ich iBatis wenn das DB Schema schon steht und es sich nicht einfach als "echtes" Objektmodell mappen lässt, also bei Legacy Anwendungen, iBatis ist da flexibler als Hibernate imho.
 
T

tuxedo

Gast
Na dann werd' ich mir doch mal Hibernate genauer anschauen müssen um für mich abwägen zu können was sich nun besser eignet für meine Zwecke.

Du hast nicht zufällig ein brauchbares Hibernate-Tutorial parat? Eins das nicht aus 100 Seiten (10 tuns auch) besteht und nicht mehr funktioniert weil's veraltet ist?
 
M

maki

Gast
Kenne kein aktuelles Hibernate Tutorial, allerdings ist das Ding gut dokumentiert (auf der JBoss Seite auch besser erreichbar).
Bin mir allerdings nicht ganz schlüssig ob sich Hibernate noch lohnt, das Projekt scheint etwas einzuschlafen, EclipseLink (ehem. TopLink) dagegen wird die Referenz Implementierung für JPA 2.0.
 
T

tuxedo

Gast
Okay, von mir auch auch Eclipse-Link ;-)
Binde ich mich damit irgendwie an Eclipse und den damit verbundenen "Ich brauch eine Quadtrillion Libraries damit's läuft" Horror?

- Alex
 
M

maki

Gast
Nein, weder brauchst du Eclipse noch 'ne Million jars, das ist nicht so wie bei Hibernate ;)
 
T

tuxedo

Gast
Allea klar, danke. Werd' mich dann mal durch die Eclipse-Link Seite wühlen ...

- Alex
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben