!!!Hibernate Grundkonfiguration (Datenbankanbindung)

Bevor wir die Fenstergestaltung von Eingabemasken beginnen schaffen wir die Basis für die Datenbankanbindung.


!!Hibernate
Hibernate ist ein Open-Source-Projekt und wird für unsere Beispielanwendung eingesetzt.
Mit Hibernate werden Java-Objekte dauerhaft in einer relationalen Datenbank gespeichert und aus entsprechenden Datensätzen wiederum Objekte in Java erzeugt. Mit Hibernate ist eine datenbankunabhängige Entwicklung möglich.  


!!HSQL Datenbank
Als Datenbank setzen wir zunächst HSQL ein. HSQL ist eine freie vollständig in Java programmierte relationale SQL-Datenbank und steht unter einer freien Lizenz.
HSQL benötigt lediglich die Datei hsqldb.jar. Alle Daten werden in einer einfachen Textdatei in Klartext gespeichert. Mit einem einfachen Texteditor ist eine Änderung der Daten möglich, sollte aber vermieden werden.
Für HSQL wird kein gesonderter SQL-Server wie z.B. bei MySQL oder PostgreSQL benötigt. Aufgrund der einfachen Konfiguration und Übertragbarkeit der Daten mit dem Programm auf andere Rechner bzw. die Verwendung schreibgeschützt von einer CD/DVD wird dieses Beispiel mit HSQL starten. 

!!log4j
log4j ist ein Framework zum Loggen von Anwendungsmeldungen in Java.


!!Dateien herunterladen und einrichten

Zunächst wird für alle Module das aktuellste Archiv heruntergeladen: 

Hibernate  http://www.hibernate.org/ 

HSQL       http://www.hsqldb.org/

log4j      http://logging.apache.org/log4j/


In unserem Projekt legen wir nun ein neues Verzeichnis mit dem Name "lib" an.

Eclipse: (File / New / Folder) als Folder name geben wir "lib" ein.

In diesem lib - Verzeichnis werden zukünftig alle für das Projekt benötigten Bibliotheken gespeichert.
Insbesondere die Dateien von Hibernate ändern sich von Version zu Version. Daher werden diese hier nicht einzeln aufgezählt. Üblicherweise befindet sich innerhalb des Hibernate Verzeichnisses eine readme.txt Datei. In dierser Datei werden alle benötigten Bibliotheken und deren Einsatzzweck genannt.

Für HSQL wird, wie bereits erwähnt nur die Datei hsqldb.jar 
und für unser Loggin die Datei log4j-Version.jar
in unser lib - Verzeichnis kopiert.

!!Hibernate mittels hibernate.cfg.xml konfigurieren
Die wichtigsten Parameter für die Datenbankanbindung können bei Hibernate über Datei hibernate.cfg.xml vorgegeben werden. Die Datei hibernate.cfg.xml sollte sich im Root-Verzeichnis des Classpaths der Anwendung gespeichert werden. Das ist das Verzeichnis "src" in unserem Projekt.


  Es folgt nun die komplette Datei: hibernate.cfg.xml

  <?xml version='1.0' encoding='utf-8'?>
  <!DOCTYPE hibernate-configuration PUBLIC
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     //
    <hibernate-configuration>
       <session-factory>
       //
       <!-- Database connection settings -->
       <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
       <property name="connection.url">jdbc:hsqldb:file</property>
       <property name="connection.username">SA</property>
       <property name="connection.password"></property>
       //
       <!-- SQL dialect -->
       <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
       //
       <!-- Disable the second-level cache  -->
       <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
       //
       <!-- Echo all executed SQL to stdout -->
       <property name="show_sql">true</property>
       //
       <!-- Drop and re-create the database schema on startup -->
       <property name="hbm2ddl.auto">update</property>
       //
       <!-- Mappings -->
       <mapping class="de.tth.genre.Genre"/>
       //
       </session-factory>
    </hibernate-configuration>


Die Dokumententypdeklaration wird vom XML-Parser verwendet    
  <!DOCTYPE hibernate-configuration PUBLIC
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">


Hier werden die Datenbankspezifischen Angaben durchgeführt.

!connection.driver_class
Hiermit wird der Datenbanktreiber festgelegt.

Unsere drei wichtigesten Treiber sind:

hsql       = org.hsqldb.jdbcDriver

MySQL      = com.mysql.jdbc.Driver

PostgreSQL = org.postgresql.Driver


!connection.url
hsql       = jdbc:hsqldb:file (Ausgabe in eine lokale Datei

MySQL      = jdbc:mysql://localhost:3306/Datenbankname

PostgreSQL = jdbc:postgresql://localhost:5432/Datenbankname


       <!-- Database connection settings -->
       <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
       <property name="connection.url">jdbc:hsqldb:file</property>
       <property name="connection.username">SA</property>
       <property name="connection.password"></property>


!dialect
Jede Datenbank unterstützt eine etwas andere Version von SQL. Die Unterschiede betreffen u.a. die Syntax der Spalten z.B. der Datentypen, der verfügbaren SQL-Funktionen usw. Durch den ausgewählten Dialekt vereinheitlicht Hibernate den Zugriff auf diverse Datenbanken.
 
  hsql       = org.hibernate.dialect.MySQLDialect
  MySQL      = org.hibernate.dialect.HSQLDialect
  PostgreSQL = org.hibernate.dialect.PostgreSQLDialect


       <!-- SQL dialect -->
       <property name="dialect">org.hibernate.dialect.HSQLDialect</property>


!cache.provider_class
Der interne Cache von Hibernate wird ausgeschaltet

       <!-- Disable the second-level cache  -->
       <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

!show_sql
Durch den Parameter show_sql = TRUE gibt Hibernate alle generierten SQLs auf der Konsole aus.

       <!-- Echo all executed SQL to stdout -->
       <property name="show_sql">true</property>

!hbm2ddl.auto

hbm2ddl.auto = update = erstellt Hibernate die Tabellen automatisch, sofern sie noch nicht existieren.

hbm2ddl.auto = create = LÖSCHT ALLE TABELLEN und erstellt automatisch neue Tabellen.

       <!-- Drop and re-create the database schema on startup -->
       <property name="hbm2ddl.auto">update</property>



!class
Hier werden alle Klassen inkl. Paket aufgezählt. Somit wird eine Verbindung zu Hibernate hergestellt.

(Diese Klasse werden wir später erstellen.)


       <!-- Mappings -->
       <mapping class="de.tth.genre.Genre"/>