10 nhibernate

36
 1 0 Sistemi  baza  podataka  NHibernate Ra  čunarstvo i informatika Katedra za računarstvo  Elektronski fakultet u Nišu Letnji semestar 2015

Upload: aleksandar-aca-marinkovic

Post on 04-Nov-2015

14 views

Category:

Documents


1 download

DESCRIPTION

2321

TRANSCRIPT

  • 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