10 nhibernate
DESCRIPTION
2321TRANSCRIPT
-
10
Sistemi baza podataka
NHibernate
Raunarstvo i informatika
Katedra za raunarstvo
Elektronski fakultet u Niu
Letnji semestar 2015
-
20NHibernate
NHibernate manipulacija objektima se bazira na korieenju
metoda koje implementira ISession interfejs.
Interfejs za rad sa NHibernate sesijama
Obezbeuje metode za osnovne CRUD operacije
Persistance manger poto obezbeuje mehanizme za perzistenciju objekata
Jednostavno kreiranje i unitavanje sesije (ne zahteva puno resursa)
Nije thread safe. Nhibenate sesija se koristi samo u okviru jedne niti
Odgovara konekciju kod ADO.NET biblioteke
Sistemi baza podataka
-
30NHibernate
Krieranje perzistentnog objekta.
Prilikom kreiranja perzistentnog objekta, objektu se dodelju
vrednost primarnog kljua prema mehanizmu koji je definisan
mapiranjem.
Sistemi baza podataka
-
40NHibernate
Uitavanje perzistenog objekta na osnovu poznate vrednosti
primarnog kljua.
Metoda Load generie izuzetak ukoliko ne postoji vrsta sa zadatom
vrednou primarnog kljua.
Sistemi baza podataka
-
50NHibernate
Metoda Get se koristi u situacijama kada korisnik nije siguran da
postoji podataka sa zadatom vrednou primarnog kljua.
Sistemi baza podataka
-
60NHibernate
Metoda Refresh omoguava da se sadraj objekta ponovo uita iz
baze podataka u bilo kom trenutku.
Pri tome se ponovo uitavaju i podaci u svim kolekcijama koje
pripadaju objektu.
Korisno u situacijama kada postoji vie konkurentnih korisnika koji
mogu da promene stanje objekta.
Sistemi baza podataka
-
70NHibernate
Metoda CreateQuery omoguava kreiranje upita za pretraivanje
podataka.
Upiti se zadaju korienjem HQL jezika
Ekvivalent SELECT * FROM upita:
Sistemi baza podataka
-
80NHibernate
Upit sa WHERE klauzulom
Sistemi baza podataka
-
90NHibernate
Parametrizovani upit
Sistemi baza podataka
-
10
0NHibernate
Upit sa imenovanim parametrima (mogu se navoditi u bilo kom
redosledu, mogu se koristiti vie puta u upitu)
Parametri se zadaju u obliku :ime .
Sistemi baza podataka
-
11
0NHibernate
Sistemi baza podataka
-
12
0NHibernate
Ukoliko se oekuje da upit vrati veliki broj rezultata preporuuje se
korienje Enumerable metode.
Metoda Enumerable vraa System.Collections.IEnumerable
interfejs.
Metoda funkcionie tako da se inicijalno vraaju samo identifikatori
objekata koji zadovoljavaju uslove, a nakon toga uz pomo iteratora
se objekti uitavaju na zahtev.
Metoda Enumerable daje bolej rezultate i u situacijama kada se
oekuje postojanje velikog broja duplikata u podacima. Metoda se
tada u velikoj meri oslanja na ke sesije, pa se jednom uitani
objekti ne uitavaju ponovo.
Sistemi baza podataka
-
13
0NHibernate
Sistemi baza podataka
-
14
0NHIbernate
Upiti koji vraaju samo jednu vrednost (skalarnu vrednost ili
instancu objekta)
Sistemi baza podataka
-
15
0NHibernate
Sistemi baza podataka
-
16
0NHibernate
Upiti koji vraaju vie vrednosti (skalarnih i/ili objekata)
Sistemi baza podataka
-
17
0NHibernate
Definisanje prve rezultujue vrste i maksimalnog broja rezultujuih
vrsta
Sistemi baza podataka
-
18
0NHibernate
HQL predstavlja moan jezik za kreiranje upit. Glavni nedostatak je
to se upit piu kao stringovi iju ispravnost je nemogue proveriti
pre izvravanja upita.
Nhibernate kao alternativu nudi korienje ICriteria interfejsa.
Sistemi baza podataka
-
19
0NHibernate
QueryOver kao alternativa korienju NHibernate criteria izraza
Sistemi baza podataka
-
20
0NHibernate
Language INtegratedQuery (LINQ)
LINQ predstavlja skup proirenja .NET Framework okruenja koja
obuhvataju operacije za rad sa upitima, skupovima i
transformacijama.
Osnovni cilj je da se sintaksa .NET jezika proiri podrkom za
kreiranje upita.
Osnovna namena je da se u okviru .NET programskih jetika olaka
pristup i integracija informacija van OO okruenja (relacione baze
podataka i XML dokumenti).
Sistemi baza podataka
-
21
0NHibernatepublic static List people = new List()
{
"Granville", "John", "Rachel", "Betty", "Chandler", "Ross",
"Monica"
};
static void Main(string[] args)
{
IEnumerable query = from p in people select p;
foreach (string person in query)
{
Console.WriteLine(person);
}
}
Sistemi baza podataka
-
22
0NHibernate
static void Main(string[] args)
{
IEnumerable query = from p in people
where p.Length > 5
order by p
select p.ToUpper();
foreach (string person in query)
{
Console.WriteLine(person);
}
}
Sistemi baza podataka
-
23
0NHibernate
NHibernate LINQ NuGet paket
Podrka:
using System.Linq;
using NHibernate.Linq;
Sistemi baza podataka
-
24
0NHibernate
Sistemi baza podataka
-
25
0NHibernate
Sistemi baza podataka
-
26
0NHibernate
Sistemi baza podataka
-
27
0NHibernate
Izvravanje Native SQL naredbi
Sistemi baza podataka
-
28
0NHibernate
Sve izmene nad objektima, koje se izvre u toku trjanja sesije u
kojoj je objekat uitan, automatski e biti zapamene u bazu
podataka kada se izvri tzv. Flush sesije.
U praksi se esto javlja potreba da se objekat uita u jednoj sesiji,
da se zatim koristi nezavisno od sesije i da se na kraju snimi u
potpuno novoj sesiji.
U tu svrhu se koristi metoda Update.
Sistemi baza podataka
-
29
0NHibernate
Sistemi baza podataka
-
30
0NHibernate
Ukoliko je u drugoj sesiji ve uitan objekat sa istim identifikatorom
generisae se izuzetak prilikom poziva metode Update.
Metoda SaveOrUpdate detektuje da li se radi o potpuno novoj
instanci ili se radi o ve postojeem objektu. Za nove objekte
efekat je isti ka da je pozvana metoda Save a za postojee objekte
efekat je isti kao da je pozvana metoda Update.
Za razlikovanje novih i postojeih instanci koristi se vrednost
identifikatora. Podrazumevano se uzima da je kod novih objekata
vrednost identifikatora 0 ali se mapiranjem moe specificirati
drugaija logika.Id(x => x.Id, "ID").GeneratedBy.TriggerIdentity().UnsavedValue(-1);
Sistemi baza podataka
-
31
0NHibernate
Update i SaveOrUpdate se koriste u sledeem scenariju:
1. Aplikacija uitava objekat u prvoj sesiji
2. Objekat se prosleuje najee UI sloju
3. UI prikazuje objekat i dozvoljava korisniku da ga menja
4. UI prosleuje modifikovani objekat sloju za rad sa podacima
5. Otvara se druga sesija i objekat se snima korienjem Update ili
SaveOrUpdate metode
Sistemi baza podataka
-
32
0NHibernate
SaveOrUpdate funkcionie na sledei nain:
Ukoliko objekat pripada sesiji i nije modifikovan ne radi nita
Ukoliko nije definisana vrednost identifikatora poziva se metoda Save
Ukoliko vrednost identifikatora odgovara vrednsoti definisanoj u UnsavedValue poziva se metoda Save
Identifikator objekta je definisan ali u sesiji ve postoji objekat sa tim identifikatorom generie se izuzetak
Poziva se Update
Da bi se izbeglo generisanje izuzetka u sluaju da ve postoji
objekat sa istim identifikatorom, moe korisitit metoda Merge.
Metoda Merge kopira vrednosti objekta u objekat )koji je vezan za
sesiju) sa istim identifikatorom. Ukoliko takav objekat ne postoji u
sesiji uitava se iz baze podataka.
Sistemi baza podataka
-
33
0NHibernate
Metoda Delete obezbeuje brisanje podatka iz baze podataka.
Sistemi baza podataka
-
34
0NHibernate
Podrka za rad sa transakcijama
Sistemi baza podataka
-
35
0NHibernate
Periodino Nhibernate sesija obavlja sinhronizaciju objekata u
svom keu sa objektima u bazi podataka.
Sinhronizacija se obavlja u sledeim trenucima:
1. Prilikom pozivanja Get, CreateQuery/List, Enumerable() metoda
2. poziv NHibernate.ITransaction.Commit() metode
3. Poziv ISession.Flush metode
Sistemi baza podataka
-
36
0NHibernate
Zatvaranje sesije:
1. Flush sesije
2. Commit transakcije
3. Close sesije
4. Obrada izuzetaka
Ukoliko se koristi transakcija nije neophodno eksplicitno pozvati
Flush metodu. Metode Commit i Rollback obezbeuju automatski
flush proces za sesiju koja se zatvara.
Sistemi baza podataka