piątek, 21 listopada 2008

Hibernate + NetBeans 6.5 krok po kroku

Przykład stworzony jest przy pomocy NetBeans 6.5 oraz technologii Hibernate 3.5. Baza danych to Oracle 10g.

1. Tworzymy nowy projekt Ctrl+Shift+N z kategorii Java - > Java Aplication następnie Next. Wpisujemy nazwę projektu Przykład1 oraz wybieramy ścieżkę docelową, gdzie zostanie utworzony projekt. A następnie przycisk Finish.

2. Jeśli jeszcze nie mamy wcześniej zainstalowanego Hibernate można to zrobić przy pomocy Tools -> Plugins a następnie wybrać Hibernate Support oraz Hibernate 3.2.5 Library i Install.

3. Skoro już mamy zainstalowane biblioteki Hibernate powinniśmy je jeszcze dołączyć do naszego projektu. W panelu Projects zaznaczamyLibraries, potem kolejno Add Library.

4. Tworzymy plik konfiguracyjny Hibernate , który powinien się nazywać hibernate.cfg.xml. Wybieramy New -> XML Document i nadajemy mu nazwę hibernate.cfg i Next, Finish.

I uzupełniamy odpowiednim kodem, przykład pliku konfiguracyjnego:

<?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>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect
</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver
</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="hibernate.connection.username">uzytkownik
</property>
<property name="hibernate.connection.password">haslo
</property>
</session-factory>
</hibernate-configuration>


Więcej o konfiguracji połączenia w artykule Połączenie Hibernate z Oraclem.

5. Kolejną ważną rzeczą jest dodanie sterownika do odpowiedniej bazy danych z którą chcemy połączyć aplikację tzn JDBC Driver.

Można je pobrać dla Oracle ze strony: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html

Dodajemy to następująco Libraries ->Properties -> Add JAR/Folder wybieramy odpowiednie archiwum JAR Open i Ok.

6. A teraz coś czego nie można było tworzyć we wcześniejszej wersji Hibernate, czyli generowanie kodu na podstawie istniejących tabel w bazie danych.

Aby móc skorzystać z tej opcji musimy najpierw w połączonej z Hibernate bazie danych stworzyć tabele. Dla zademonstrowanie tego przykładu utworzyłam taką tabelę w Oraclu:

CREATE TABLE Osoba

( imie VARCHAR2(15) NOT NULL,

nazwisko VARCHAR2(15) NOT NULL,

plec VARCHAR2(1) CHECK(plec IN ('M','D')),

pesel VARCHAR2(11) PRIMARY KEY

);

Używamy Crlt+N wybieramy Categories: Hibernate i File Types: Hibernate Mapping Files and POJOs from Database.

Next.

Nadajemy nazwę pliku generateCode i dajemy Next. Pojawia się okno z nazwą bazy, należy podać hasło i OK. W oknie Available Tables pojawią się wszystkie tabele, które są utworzone w bazie danych, można dodać tylko część z nich do projektu przyciskiem Add. Bądź dodać całą bazę używając przycisku Add All. Next.

Domyśle ustawienia sprawiają, że zostaną utworzone klasy Javy oraz pliki mapujące Hibernate , tak więc nic nie należy zmieniać, pozostaje przycisk Finish.

Powstała dzięki temu klasa Osoba.java oraz plik mapujący Osoba.hbm.xml oraz plik xml generateCode.xml.

Aby udowodnić, że to naprawdę super narzędzie skopuję wygenerowane pliki

Osoba.java

package przykad1;

public class Osoba implements java.io.Serializable {

private String pesel;

private String imie;

private String nazwisko;

private String plec;

public Osoba() {

}

public Osoba(String pesel, String imie, String nazwisko) {

this.pesel = pesel;

this.imie = imie;

this.nazwisko = nazwisko;

}

public Osoba(String pesel, String imie, String nazwisko, String plec) {

this.pesel = pesel;

this.imie = imie;

this.nazwisko = nazwisko;

this.plec = plec;

}

public String getPesel() {

return this.pesel;

}

public void setPesel(String pesel) {

this.pesel = pesel;

}

public String getImie() {

return this.imie;

}

public void setImie(String imie) {

this.imie = imie;

}

public String getNazwisko() {

return this.nazwisko;

}

public void setNazwisko(String nazwisko) {

this.nazwisko = nazwisko;

}

public String getPlec() {

return this.plec;

}

public void setPlec(String plec) {

this.plec = plec;

}

}

Zostały więc wygenerowane od razu gettery i settery oraz konstruktory klasy.

Plik mapujący wygląda następująco:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2008-11-22 01:24:59 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="przykad1.Osoba" table="OSOBA" schema="AGATA">
<id name="pesel" type="string">
<column name="PESEL" length="11" />
<generator class="assigned" />
</id>
<property name="imie" type="string">
<column name="IMIE" length="15" not-null="true" />
</property>
<property name="nazwisko" type="string">
<column name="NAZWISKO" length="15" not-null="true" />
</property>
<property name="plec" type="string">
<column name="PLEC" length="1" />
</property>
</class>
</hibernate-mapping>
Warto również zajrzeć jak zmienił się plik 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>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect
</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver
</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="hibernate.connection.username">uzytkownik
</property>
<property name="hibernate.connection.password">haslo
</property>
<mapping resource="przykad1/Osoba.hbm.xml"/>
</session-factory>
</hibernate-configuration>

Automatycznie został dodany znacznik ze ścieżką do pliku mapującego.

1 komentarz:

Unknown pisze...

mam jedno pytanko, szukam jak najprostszych przykładów wyświetlających z mapowanych danych. Znalazłam, ale wszystkie są oparte o trudne przykłady. Czy ktoś zna jakiś strony, gdzie można za pomocą JSP wyświetlić już z mapowane dane?