Moduł 07

Transkrypt

Moduł 07
Metody dostępu
do danych
dr inż. Grzegorz Michalski
na podstawie materiałów od dr inż. Juliusza Mikody
Architektura Hibernate
Własności hibernate
Własności hibernate określamy w pliku konfiguracyjnym
hibernate.properities w katalogu głównym aplikacji.
Można zdefiniować wartość w pliku konfiguracyjnym
hibernate.cfg.xml. Wartości te nadpisują wartości
wprowadzone w pliku hibernate.properities.
Możliwe jest także określenie właściwości bezpośrednio w
programie. Własności można zmienić metodą klasy
Configuration :
void setProperty(String key, Object value)
Hibernate – etapy tworzenia
aplikacji
Określenie obiektów zdolnych do trwałych (określenie
własności do utrwalenia)
Tworzenie plików XML odwzorowań obiektów w bazie
Tworzenie schematu bazy danych (modyfikacja lub użycie już
istniejącej bazy)
Dołączenie bibliotek Hibernate do projektu
Utworzenie pliku konfiguracyjnego
Utworzenie obiektu Configuration / SessionFactory
Najważniejsze własności
hibernate.connection.driver_class – klasa sterowników
jdbc
hibernate.connection.password – hasło do bazy danych
hibernate.connection.url – adres połączenia z bazą danych
hibernate.connection.username – użytkownik bazy danych
hibernate.connection.pool_size – liczba jednoczesnych
połączeń z bazą danych
hibernate.dialect – dialekt używany w bazie danych
Najważniejsze własności
hibernate.hbm2ddl.auto – automatyczne uaktualnienie
schematu bazy danych. Może przyjmować wartości:
create – tworzenie schematu bazy danych
create-drop – utworzenie schematu bazy danych a
następnie jego usunięcie po zakończeniu działania aplikacji
update – uaktualnienie schematu bazy danych
validate – sprawdzenie poprawności schematu bazy
danych
Konfiguracja hibernate.properities
Jednym ze sposobów wprowadzenia konfiguracji jest utworzenie pliku
hibernate.properities. Plik ten powinien zawierać pary: parametr =
wartość:
hibernate.connection.driver_class =
com.mysql.jdbc.Driver
hibernate.connection.url =
jdbc:mysql://localhost:3306/test
hibernate.connection.username = root
hibernate.connection.password = *****
hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
hbm2ddl.auto = update
show_sql = true
Konfiguracja hibernate.cfg.xml
Plik hibernate.cfg.xml może zawierać pełną konfiguracje
połączenia hibernate lub nadpisywać dane już istniejące:
<?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.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">max</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
Dialekt SQL
W celu uogólnienia działania metod komunikacji z bazą danych
wszystkie różnice pomiędzy systemami bazodanowymi zostały
zaimplementowane w odpowiednich klasach dialektów SQL. Klasy te
istnieją w pakiecie org.hibernate.dialect.
Każdy z silników baz danych posiada własny dialekt który powinien
być załadowany do konfiguracji:
MySQL: MySQL5Dialect, MySQLDialect (poniżej wersji 5.0)
Oracle: Oracle10gDialect, Oracle9i, Oracle
PostgreSQLDialect, ProgressDialect, SQLServer2008Dialect,
SQLServerDialect
Załadowanie konfiguracji
Do załadowania konfiguracji do hibernate służy metoda
configure() klasy Configuration. Możliwych jest pięć
wariantów wywołania tej metody:
Configuration configure() - załadowanie domyślnego
pliku XML: hibernate.cfg.xml
Configuration configure(Document document) –
pobranie danych z dokumentu xmla
Configuration configure(File configFile)
załadowanie informacji z pliku
Configuration configure(String resource) – j/w
Configuration configure(URL url) - adres sieciowy
Mapowanie obiektów
Aby obiekt klasy mógł być przekazany jako obiekt trwały dla
klasy musi powstać odpowiedni plik odwzorowania w bazie
danych.
Nazwa pliku powinna odpowiadać nazwie klasy z dodanym
rozszerzeniem Klasa.hbm.xml
Plik powinien znajdować się w tym samym katalogu co klasa.
Informacja o odwzorowaniu powinna być przekazana do
obiektu Configuration za pomocą metod zanim zostanie
utworzona fabryka sesji.
Mapowanie obiektów
public class User {
private long userId;
private String name;
private String surname;
public User() {
// Konstruktor domyślny wymagany przez Hibernate
}
public User(String name, String surname) {
this.name = name;
this.surname = surname;
}
// metody get i set
}
Mapowanie obiektów
<?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>
<class name="pl.test.User" table="USER">
<id name="userId" type="long">
<column name="ID" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<property name="surname" type="java.lang.String"
column="SURNAME" />
</class>
</hibernate-mapping>
Obiekt class
Służy do opisu jednego wiersza (krotki) tabeli danych
odpowiadającemu jednemu obiektowi danej klasy. Może
posiadać kilka atrybutów:
name – nazwa klasy javy, która przyjmuje wartości
pobrane z bazy danych.
package – pakiet, w którym znajduje się klasa. Nazwa
klasy może być powiązana z pakietem.
table – nazwa tabeli do której dany obiekt się odnosi.
Obiekt id
Mapowanie klucza podstawowego tabeli danych. Obiekt ten musi istnieć w
mapowaniu klasy.
name – nazwa pola klucza. Wartość opcjonalna jeśli obiekt nie implementuje
wartości klucza głównego tabeli danych.
type – typ wartości identyfikowany przez hibernate
column – nazwa kolumny w bazie danych
generator – obiekt służący do implementacji generatora przydzielającego
unikalny identyfikator (increment, identity, sequence,
assigned – default, select, foreign)
Obiekt property
Obiekt wiążący kolumnę wiersza tabeli z atrybutem klasy. Atrybuty:
name – nazwa atrybuty klasy
column – nazwa kolumny w bazie danych
type – nazwa typu zapisywanego w bazie:
Bazodanowe: integer, string, character, date,
timestamp, float, binary, serializable, object,
blob ...
Klasy javy: int, float, char, java.lang.String,
java.util.Date, java.lang.Integer,
java.sql.Clob ...
Obiekt property
unique – wartość unikatowa dla bazy danych
not-null – wymaganie istnienia wartości
generated – informuje o generowaniu wartości przez bazę danych
formula – pole generowane przez bazę danych na podstawie zapytania
sql, np:
formula="( SELECT SUM (quantity*price) FROM
Tab)"
Obiekt tworzenia sesji
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().
Configure().builsSesionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory
creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Utworzenie obiektu trwałego
Session session =
HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
User user = new User("Tomasz", "Nowak");
session.save(user);
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
e.printStackTrace();
} finally {
session.close();
}

Podobne dokumenty