NHibernate

Transkrypt

NHibernate
NHibernate
Narzędzie mapowania obiektowo relacyjnego
Autor : Maciej Białorucki
Mapowanie obiektowo-relacyjne
obiektowo relacyjne
z
Mapowanie obiektowo - relacyjne
z
Object – Relation Mapping
z
Dwa światy
z
Dlaczego
g nie stosować baz obiektowych?
y
NHibernate
z
Czym jest?
z
z
z
Wadyy
z
z
Narzędzie ORM dla Javy i C#
Zapewnia obiektowy model dostępu do danych
Dokumentacja „najeżona” błędami
Zalety
z
z
z
Znaczne zredukowanie ilości pracy związanej z
oprogramowaniem dostępu do danych
Model obiektowy
Nie wymaga modyfikowania klas zapisywanych
obiektów
Klasyczne podejście
z
Stosowanie ADO.NET
z
z
z
Obiekty DataTable, DataColumn, DataSet itd.
Używanie kontrolek dostępnych w Visual Studio
Zaletyy :
z
z
z
Standardowe rozwiązanie, często stosowane
Dobrze udokumentowane
Wady :
z
z
Konieczność wykorzystywania SQL’a
R
Rozwiązanie
i
i nie
i d
do kkońca
ń obiektowe
bi kt
Przykład cz.1
Kod klasy :
class Przesylka
{
private int Id;
private int pr_Id;
private int kh_Id;
private int typPrzesylki;
private Wymiary wymiary;
private Atrybuty atrybuty;
private int fk_Id;
private string
p
g opis;
p ;
private int ilosc;
private double wartosc;
private DateTime dataNadania;
...
}
Plik mapowania :
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="znaczekGT_hibernate.Przesylka,znaczekGT_hibernate" table="Przesylka">
<id name="ID" column="id_przesylki" type="Int32">
<generator class="native" />
</id>
<property name="PR_ID" column="pr_Id" type="Int32"/>
<property name="KH_ID" column="kh_Id" type="Int32"/>
<property name="TYP_PRZESYLKI" column="typ_przesylki_id" type="Int32"/>
<property name="POLECONY" column="polecony" type="Boolean"/>
<property name="PRIORYTET" column="priorytet" type="Boolean"/>
<property name="POTWIERDZENIE_ODBIORU" column="potwierdzenieOdbioru" type="Boolean"/>
<property name="POSTERESTANTE" column="posteRestante" type="Boolean"/>
<property name="WARTOSC" column="wartosc" type="Double"/>
<property name="DELIKATNA_ZAWARTOSC" column="delikatnaZawartosc" type="Boolean"/>
<property name="DOSTARCZONA" column="dostarczona" type="Boolean"/>
<property
p p y name="WAGA" column="waga"
g type="Double"/>
yp
<property name="WYSOKOSC" column="wysokosc" type="Double"/>
<property name="SZEROKOSC" column="szerokosc" type="Double"/>
<property name="DLUGOSC" column="dlugosc" type="Double"/>
<property name="FK_ID" column="fk_Id" type="Int32"/>
<property name="OPIS" column="opis" type="String" length="255"/>
<property name="ILOSC"
name= ILOSC column=
column="ilosc"
ilosc type=
type="Int32"
Int32 />
<property name="DATA_NADANIA" column="data_nadania" type="DateTime" />
...
</class>
</hibernate-mapping>
Przykład cz.2
Plik konfiguracyjny :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
configuration
<nhibernate>
<add key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider”/>
< dd kkey="hibernate.dialect"
<add
"hib
t di l t"
value="NHibernate.Dialect.MsSql2000Dialect/>
<add key="hibernate.connection.driver_class"
value="NHibernate.Driver.SqlClientDriver"/>
q
<add key="hibernate.connection.connection_string"
value="Data Source=MACIEJ-E2F689BB\SQLEXPRESS;
Database=ZnaczekGT2;Integrated Security=SSPI”/>
</ hib
</nhibernate>
t >
</configuration>
Przykład cz.3
public int zapiszPrzesylke(Przesylka p)
public List<Przesylka> pobierzPrzesylki()
{
{
try
List<Przesylka> tmp = null;
{
try
sesja = fabryka.OpenSession();
{
transakcja = sesja.BeginTransaction();
sesja = fabryka.OpenSession();
int tmp = (int)sesja.Save(p);
(int)sesja Save(p);
t
tranzakcja
k j = sesja.BeginTransaction();
j B i T
ti ()
tranzakcja.Commit();
tmp = (List<Przesylka>)sesja.CreateQuery("from Przesylka").
return tmp;
List<Przesylka>();
tranzakcja.Commit();
}
catch (HibernateException e)
}
{
catch (HibernateException e)
tranzakcja.Rollback();
{
throw e;
tranzakcja.Rollback();
}
throw e;
finally
}
{
finally
sesja.Close();
{
}
sesja.Close();
}
}
return tmp;
}
Inne narzędzia ORM
NJDC
z Sooda
z TierDeveloper
z Lattice Data Mapper
z NObject
z Dali
z NPersist
z ...
z
O czym nie powiedziałem
Odwzorowywanie relacji
z Odwzorowanie kolekcji
z Adnotacje, atrybuty
z Cykl życia trwałych obiektów
z HQL – Hibernate Query Language
z Cache
z ...
z
Źródła
z
z
z
„Hibernate. Od
O nowicjusza do profesjonalisty”,
f
D.Minter,
J.Linwood, Power Net 2007
NHibernate Reference Documentation
Documentation, vv.1.2.0
120
http://sourceforge.net/projects/nhibernate/
Dziękuję za uwagę

Podobne dokumenty