Podstawowe wykorzystanie Hibernate Cel Wykonanie prostej aplikacji webowej przedstawiającą wykorzystanie biblioteki. Aplikacja sprawdza w zależności od wybranej metody dodaje, nową pozycje do bazy, zmienia jej zawartość bądź usuwa wiersz z bazy dancyh. Wymagania 1. Dodany serwer zgodnie z opisem w dokumencie Konfiguracja serwera.pdf 2. Zestaw bibliotek wymagany przez Hibernate ze strony projektu ( pobierz ) lub z dołączonego archiwum lib.zip 3. Sterownik do bazy danych sterownik dla MySQL-a mysql-connector-java-3.0.17-ga-bin.jar 4. Możliwość podłączenia się do bazy danych. Dodatki 1. Plik basic_hibernate.zip zawiera cały przedstawiony poniżej przykład
Nasz projekt będze odwzorowywał tabele z bazy danych utworzoną przy pomocy poniższego skryptu CREATE TABLE osoba ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, imie VARCHAR( 20 ) NOT NULL, nazwisko VARCHAR( 20 ) NOT NULL, wiek INT NOT NULL )
Tworzymy standardowy projekt typu Dynamic Web Project - będze on szkieletem do wykonania całej aplikacji.
Ustawiamy parametry projektu 1. "Project name" - basic_hibernate 2. "Target Runtime" - wybieramy z listy dostępny kontener webowy - wybieramy dodany wcześniej serwer Apache Tomcat. W tym miejscu kończymy prace z kreatorem dodawania projektu pozostałe ustawienia pozostawiamy domyślne.
Dodajemy folder classes
Dodajemy plik hibernate.cfg.xml
Zawartość pliku hibernate.cfg.xml 1- nazwa sterownika wykorzystywanego do nawiązania połączenia 2- adres URI do bazy danych 3- hasło i login wymagane o poprawnego zalogowania się na serwer MySQL 4- ścieżka do pliku w którym są informacje o z mapowanej tabeli z bazy. <?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> (1) <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.driver</property> (2) <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property> (3) <property name="hibernate.connection.username">hibernate</property> (3) <property name="hibernate.connection.password">hibernate</property> <property name="hibernate.dialect">org.hibernate.dialect.mysqldialect</property> (4) <mapping resource="pl/basic/hibernate/osoba.hbm.xml" /> </session-factory> </hibernate-configuration>
Do katalogu./webcontent/web-inf/lib kopiujemy elementy podstawowe wymagane przez Hibernate:./WebContent/WEB-INF/lib/antlr-2.7.6.jar./WebContent/WEB-INF/lib/asm.jar./WebContent/WEB-INF/lib/asm-attrs.jar./WebContent/WEB-INF/lib/cglib-2.1.3.jar./WebContent/WEB-INF/lib/commons-collections-2.1.1.jar./WebContent/WEB-INF/lib/commons-logging-1.0.4.jar./WebContent/WEB-INF/lib/dom4j-1.6.1.jar./WebContent/WEB-INF/lib/hibernate3.jar./WebContent/WEB-INF/lib/jta.jar./WebContent/WEB-INF/lib/log4j-1.2.11.jar Sterownik wykożystywany przy nawiązywaniu połączenia./webcontent/web-inf/lib/mysql-connector-java-3.0.17-ga-bin.jar
Dodawanie klasy odwzorowującej tabele z bazy danych
Dodajemy do klasy pola odpowiadające polami z tabeli w bazie danych
Dodawania metod typu set i get Do poprawnego użytkowania klasy są wymagane metody ustawiające i pobierające wartości pól. Można do tego użyć funkcje oferowane przez środowisko Eclipse.
Dodawanie pliku Osoba.hmb.ml
Zawartość pliku Osoba.hmb.ml 1 łączenie tabeli z bazy danych z klasą odpowiedzialną za jej odwzorowanie jako obiekt 2 określanie id (klucza głównego) dla tabeli 3- określenie w jaki sposób będzie zmieniana wartość tego pola pole typu autoincrement więc będze o ot dbaćsama baza danych (native) 4 określenie odwzorowania kolumny z tabeli na pole w klasie poprzez wskazanie konkretnych nazw 5 prak atrybutu column informuje ze pole w tabeli ma taką samą nazwę jak pole w klasie <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> (1) <class name="pl.basic.hibernate.osoba" table="osoba"> (2) <id name="id" column="id"> (3) <generator class="native" /> </id> (4) <property name="nazwisko" column="nazwisko" /> (4) <property name="imie" column="imie" /> (5) <property name="wiek" /> </class> </hibernate-mapping>
Tworzenie strony odpowiedzialnej za obsługę bazy
Zawartość pliku index.jsp Do pobrania wszystkich elementów tablicy wystarczy tak postać zapytania SQL FROM Osoba o. <%@ page language="java" contenttype="text/html; charset=iso-8859-2" pageencoding="iso-8859-2"%> <%@page import="org.hibernate.sessionfactory"%> <%@page import="org.hibernate.session"%> <%@page import="org.hibernate.transaction"%> <%@page import="org.hibernate.cfg.configuration"%> <%@page import="org.hibernate.query"%> <%@page import="java.util.list"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-2"> <title>hibernate</title> </head> <body> <% // tworzenie sessi i połączenia SessionFactory sf = new Configuration().configure().buildSessionFactory(); Session s = sf.opensession(); Transaction tr = s.begintransaction(); // pobieranie zawartości tabeli Query query = s.createquery("from Osoba o"); List<Osoba> table = query.list(); // zamykanie połączenia s.close(); %> </body> </html>
Metody wykorzystania obiektów zmapowanych w Hibernate // dodawanie nowej osoby Osoba osoba = new Osoba(); osoba.setimie("stefan"); osoba.setnazwisko("burczymucha"); osoba.setwiek(22); s.saveorupdate(osoba); // usuwanie osoby Integer id = Integer.parseInt(request.getParameter("id")); Object osoba = s.load(osoba.class, id); s.delete(osoba); // usuwanie osoby Integer id = Integer.parseInt(request.getParameter("id")); Osoba osoba = (Osoba)s.load(Osoba.class, id); osoba.setnazwisko(osoba.getnazwisko() + "+"); s.saveorupdate(osoba);
// pobieranie zawartości tabeli Query query = s.createquery("from Osoba o"); List<Osoba> table = query.list(); // Wyświetlanie pobranej zawartości <% for (int i = 0; i < table.size(); i++) { %> <%=table.get(i).getid()%> <%=table.get(i).getnazwisko()%> <%=table.get(i).getimie()%> <%=table.get(i).getwiek()%> <a href="index.jsp?mode=del&id=<%= table.get(i).getid() %>">usuń</a> <a href="index.jsp?mode=edt&id=<%= table.get(i).getid() %>">zmień</a> <br /> <% } %>
Uruchamianie projektu
Wynik działania aplikacji Dodaj dodaje nową pozycje do bazy Usuń usuwa daną pozycje z bazy Zmień pobiera wybrany element, modyfikuje go (dodaje znak + do końca nazwiska osoby) i ponownie zapisuje zmiany do bazy.