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.