Podstawowe wykorzystanie Hibernate

Transkrypt

Podstawowe wykorzystanie Hibernate
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)
(2)
(3)
(3)
<property
<property
<property
<property
name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
name="hibernate.connection.username">hibernate</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
<%@page
<%@page
<%@page
<%@page
<%@page
import="org.hibernate.SessionFactory"%>
import="org.hibernate.Session"%>
import="org.hibernate.Transaction"%>
import="org.hibernate.cfg.Configuration"%>
import="org.hibernate.Query"%>
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.

Podobne dokumenty