# Datenbankmodel in Java-Klassen abbilden.



## Rokko_11 (24. Jun 2012)

Hallo!

Ich habe eine Frage bezüglich der richtigen Herangehensweise: Ich habe das immer wieder aufkommende Problem, dass ich mit einer bereits existierenden Datenbank zu arbeiten habe.

Für mich als Entwickler heißt das, erstmal vernünftige Java-Klassen zu erstellen, so dass man dann - unabhängig von der Datenbank - mit Objekten hantieren kann.

Bisher benutze ich ziemlich genau die Herangehensweise von diesem Tutorial, aber dieser Weg ist - wie ich denke - nicht der richtige. Schließlich muss man zu jeder Tabelle manuell eine Klasse erstellen und alle Attribute reinfüllen, was bei tausenden Tabellen mit tausenden Attributen nicht der richtige Weg sein kann. Außerdem ist die Herangehensweise nicht genug von der Datenbank abstrahiert - man muss immerhin noch SQL-Quellcode einfügen. Dies macht den Anschein, dass das Spring-Framework nicht in allen Facetten verwendet wurde.

Hierzu vielleicht ein PHP-Vergleich: Bindet man das Zend-Framework ein, so benötigt man für das Abbild einer Datenbank lediglich den Quellcode

```
<?php class Beispieltabelle extends Zend_Db_Table_Abstract{}
```

Durch die Vererbung und die Wahl des Klassennamens kapiert das Zend-Framework automatisch, dass es sich um ein 1:1 Abbild einer Datenbanktabelle mit dem Namen "asdf" handelt, welche sich in der Datenbank befindet, zu der die Verbindung besteht. Nun kann man - ohne sie je neu definiert zu haben - Methoden wie 

```
$table = new Beispieltabelle();
$data = array(
    'columnName1'      => 'Inhalt erste Spalte',
    'columnName2' => 'Inhalt zweite Spalte'
);
 
$table->insert($data);
```
verwenden, da dies alles über Vererbung geschieht.

Ich weiß, das geschieht dort vor allem über das Verwenden von magischen Methoden, aber irgendein Framework muss es doch in Java geben, mit dem man diese nervige Arbeit nicht mehr hat. 

Weiß jemand eins? Oder ein Eclipse-Plugin zur automatischen Codegenerierung? Oder kennt jemand eine Herangehensweise mit dem Spring-Framework, die nicht so falsch ist wie die im obigen Tutorial beschriebene?

Gruß, Rokko


----------



## Fant (24. Jun 2012)

Mit den Stichworten "Entity Class" und "JPA" solltest du da schnell fündig werden. Netbeans kann mit ganz wenigen Klicken aus dem Datenbankmodel Entity-Klassen generieren. Eclipse kann das sicherlich auch, aber da ich das selbst nicht benutze, kann ich dir leider nicht sagen, wie das dort klappt.


----------



## daybyter (24. Jun 2012)

Also mir fallen da diese ganzen RAD-Frameworks wie Rails, CakePHP, Django usw ein.

Die Java-Version ist dann wohl Grails.

Ich gehe sowas derart an, dass ich ein UML Datenmodell erstelle (i.d.R. mit ArgoUML), und daraus mal eine laufende Datenbank erzeuge (dafür gibt es mehrere Plugins, aber zur Not auch XSL usw).

Die meisten RAD-Tools lesen nun die DB und erzeugen anhand der Tabellennamen und Felder automatisch die Klassen.

Geht das bei Dir nicht, gibt es ja nun aber die Option, aus dem UML-Modell per Codegenerator Java o.ä. zu erzeugen.

Ciao,
Andreas


----------



## JanHH (25. Jun 2012)

Seam (2) kann das auch automatisch, aus der Datenbank Entity-klassen erzeugen, sogar inklusive Session-Beans und JSF-Seiten zum Bearbeiten der Datenbank (was einem natürlich nur hilft, wenn man eine Seam 2/JSF-Anwendung baut).


----------

