04 Definiowanie mapowań(1)id 4998 ppt

background image

Definiowanie mapowań

Rafał Kasprzyk

background image

Rafał Kasprzyk

Przykład encji biznesowej

package pl.isolution.hibernate;

public class User {

private Long id;

private String name;

private String surname;
public Long getId() {

return id;

}
public void setId(Long id) {

this.id = id;

}

// pozostałe metody setXXX i

getXXX

}

User.java

background image

Rafał Kasprzyk

Pliki mapowań

Definiowane w plikach *.hbm.xml, które

można tworzyć ręcznie lub z

wykorzystaniem generatorów

Inżynieria w przód

Generacja odwzorowania z POJO (np.XDoclet)

Inżynieria wstecz

Adaptacja istniejącego schematu bazy danych

Pliki opisujące odwzorowanie wskazywane

są w pliku hibernate.cfg.xml

<hibernate-configuration>

<session-factory>

<--mapping files-->

<mapping resource="pl/isolution/hibernate/User.hbm.xml"/>

<mapping resource= …

</session-factory>

</hibernate-configuration>

hibernate.cf
g.xml

background image

Rafał Kasprzyk

User.hbm.xml – przykład

odwzorowania

<?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 package="pl.isolution.hibernate">

//odwzorowanie klasy na tabelę

<class name="User" table="User">

<id name="id">
<generator class="native"/>

//definicja generatora

</id>

//nazwa kolumny w bazie danych domyślnie = wartość atrybutu

name

<property name="name" column="NAME"

//domyślna wartość atrybutu type najczęściej OK

type="string" length="10"

//wartość atrybutu not-null domyślnie = false

not-null="true"

// domyślnie true, dla pól wyliczeniowych należy ustawić na

false

update= "true" insert= "true" />

<property name="surname" column="SURNAME"
length="25" not-null="true"/>

</class>

</hibernate-mapping>

background image

Rafał Kasprzyk

Więcej o definiowaniu

odwzorowania

Odwzorowanie może być bardzo zwięzłe i proste

Większość atrybutów znaczników class i property ma

sensowne wartości domyślne, odpowiednie w większości

przypadków

Typy danych Hibernate

integer, long, short, float, double, character,

byte, boolean (BIT), yes_no (CHAR(1): Y/N),

true_false (CHAR(1): T/F)

Odwzorowanie typów prostych Javy na odpowiednie typy SQL

(vendor-specific)

string

Odwzorowanie java.lang.String na VARCHAR (w Oracle

VARCHAR2)

date, time, timestap

Odwzorowanie java.util.Date na DATE, TIME, TIMESTAMP

big_decimal, big_integer

Odwzorowanie java.lang.BigDecimal i

java.lang.BigInteger na NUMERIC (w ORACLE na NUMBER)

calendar, calendar_date, locate, timezone,

currency, class, binary, text, serializable,

clob, blob

background image

Rafał Kasprzyk

Odwzorowanie identyfikatora

Odwzorowywane klasy trwałe

muszą deklarować klucz główny

tabeli

Deklaracja klucza głównego tabeli

możliwa jest dzięki właściwości

<id>

Hibernate pozwala na stosowanie

złożonych kluczy głównych

deklarowanych za pomocą

właściwości <composite-id> (nie

zalecane)

background image

Rafał Kasprzyk

Odwzorowanie identyfikatora

Definicja odwzorowania klucza

zawiera element <generator class

= ""> opisujący sposób generacji

jego wartości

Atrybutu class może przyjąć

następujące wartości: assigned, native,

identity, sequence, select, increment,

hilo, uuid.hex

background image

Rafał Kasprzyk

Generatory klucza głównego

assigned

Wartość identyfikatora musi być nadana

obiektowi przed próbą jego utrwalenia

native

Generator automatycznie wybiera jeden z

poniższych na podstawie możliwości bazy

danych

identity

Wsparcie dla automatycznie generowanych

wartości kolumny w MySQL, DB2, Sybase,

HypersonicSQL, MS SQL Server, Informix

np. AUTO_INCREMENT w MySQL

sequence

Oparty o sekwencję w bazie danych w DB2,

PostgreSQL, Oracle, SAP DB, Interbase

background image

Rafał Kasprzyk

Generatory klucza głównego

select

Pobiera wartość ustawioną przez wyzwalacz w bazie

danych

increment

Działa na zasadzie inkrementacji maksymalnej

wartości w kolumnie klucza głównego

Generacja programowa działa jeżeli tylko jeden proces w

danej chwili może wstawić wiersz do tabeli. Może więc być

stosowany tylko wtedy gdy jedynie Hibernate ma dostęp do

bazy danych.

hilo

Generator korzysta z algorytmu high/low do generacji

wartości unikalnych w obrębie pojedynczej instancji

bazy danych

uuid.hex

Generator wykorzystuje algorytm bazujący na adresie

IP komputera w kombinacji z czasem w chwili

generacji.

Uwaga!!! Zwraca wartość typu char.

background image

Rafał Kasprzyk

Przykład zmodyfikowanej encji

biznesowej

package hibernate.example;

public class User {

private long id;

private String userName;

private PhoneNumber phone;

public long getId() {

return id;

}

public void setId(long id) {

this.id = id;

}

...

// pozostałe metody setXXX i getXXX

}

User.java

background image

Rafał Kasprzyk

Kolejny przykład encji

biznesowej

package hibernate.example;

public class PhoneNumber {

private String number;

private String areaCode;

private String countryCode;

public String getNumber() {

return number;

}

public void setNumber(String number){

this.number = number;

}

...

// pozostałe metody setXXX i

getXXX

}

PhoneNumb
er.java

background image

Rafał Kasprzyk

Struktura przykładowej tabeli

CREATE TABLE USER (

UID

BIGINT NOT NULL,

UNAME

VARCHAR(50),

PCOUNTRYCODE CHAR(2),
PAREACODE

CHAR(3),

PNUMBER

VARCHAR(10),

PRIMARY KEY (ID)

)

background image

Rafał Kasprzyk

User.hbm.xml – przykład

odwzorowania

<hibernate-mapping>

<class name=”hibernate.example” table=”User”>

<id name=”id” column=”UID”>

<generator class=”increment”/>
</id>
<property name=”userName” column=”UNAME”/>

<component name=”phone”>

<property name=”countryCode”
column=”PCOUNTRYCODE” length=”2”/>
<property name=”areaCode”
column=”PAREACODE” length=”3”/>
<property name=”number”
column=”PNUMBER” length=”10”/>

</component>

</class>

</hibernate-mapping>

background image

Rafał Kasprzyk

Generacja schematu bazy

danych


import org.hibernate.HibernateException;
import org.hibernate.cfg.Configuration;
...
Configuration cfg = new Configuration();

// ładowanie hibernate.cfg.xml

cfg.configure();
...

// generowanie schematu bazy

new SchemaUpdate(cfg).execute(true)

// singleton, thread-safe

SessionFactory sessionFactory =

cfg.buildSessionFactory();

Session session =

sessionFactory.openSession();

background image

Rafał Kasprzyk

Generowanie kodu DDL

public void generateSchema(boolean exportToDB)

throws HibernateException {
Configuration cfg = new Configuration()
.configure();
new SchemaExport(cfg)
.create(true, exportToDB);
}

Wynik zostanie wysłany na

standardowe wyjście

Jeśli parametr exportToDB jest

ustawiony na true to wygenerowany

kod DDL zostanie uruchomiony w celu

utworzenia schematu bazy danych

background image

Rafał Kasprzyk

Podsumowanie

Encja biznesowa

Pliki mapowań – definiowanie

odwzorowania

Typy danych Hibernate

Odwzorowanie identyfikatora

Generatory klucza głównego

Generacja kodu DDL i schematu

bazy danych


Document Outline


Wyszukiwarka

Podobne podstrony:
2 Podstawowe definicje (2)id 19609 ppt
07 Mapowanie związków pomiędzy obiektami trwałymi(1)id 6894 ppt
04 Definicje; trucizna,dawki i zatruciaid 5288 ppt
2 Definicja, podział i charakterystyka czynników (2)id 20248 ppt
2 Podstawowe definicje (2)id 19609 ppt
13 ZMIANY WSTECZNE (2)id 14517 ppt
!!! ETAPY CYKLU PROJEKTU !!!id 455 ppt
2 Realizacja pracy licencjackiej rozdziałmetodologiczny (1)id 19659 ppt
2009 04 08 POZ 06id 26791 ppt
02 MAKROEKONOMIA(2)id 3669 ppt
11b Azotowanie i nawęglanie (PPTminimizer)id 13076 ppt
1 Wprowadzenie do psychologii pracy (14)id 10045 ppt
12a Równowaga ciecz para w układach dwuskładnikowych (a)id 14224 ppt

więcej podobnych podstron