NHibernate Narzędzie mapowania obiektowo - relacyjnego Autor : Maciej Białorucki
Mapowanie obiektowo-relacyjne Mapowanie obiektowo - relacyjne Object Relation Mapping Dwa światy Dlaczego nie stosować baz obiektowych?
NHibernate Czym jest? Narzędzie ORM dla Javy i C# Zapewnia obiektowy model dostępu do danych Wady Dokumentacja najeżona błędami Zalety 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 Stosowanie ADO.NET Obiekty DataTable, DataColumn, DataSet itd. Używanie kontrolek dostępnych w Visual Studio Zalety : Standardowe rozwiązanie, często stosowane Dobrze udokumentowane Wady : Konieczność wykorzystywania SQL a Rozwiązanie i nie do końca ń obiektowe
Przykład cz.1 Kod klasy : Plik mapowania : 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 opis; private int ilosc; private double wartosc; private DateTime datanadania;... <?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 name="waga" column="waga" type="double"/> <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" column="ilosc" type="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> <nhibernate> <add key="hibernate.connection.provider" value="nhibernate.connection.driverconnectionprovider /> <add key="hibernate.dialect" t" value="nhibernate.dialect.mssql2000dialect/> <add key="hibernate.connection.driver_class" value="nhibernate.driver.sqlclientdriver"/> <add key="hibernate.connection.connection_string" value="data Source=MACIEJ-E2F689BB\SQLEXPRESS; Database=ZnaczekGT2;Integrated Security=SSPI /> </nhibernate> </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); tranzakcja = sesja.begintransaction(); tranzakcja.commit(); tmp = (List<Przesylka>)sesja.CreateQuery("from Przesylka"). return tmp; List<Przesylka>(); tranzakcja.commit(); catch (HibernateException e) tranzakcja.rollback(); throw e; finally sesja.close(); catch (HibernateException e) tranzakcja.rollback(); throw e; finally sesja.close(); return tmp;
Inne narzędzia ORM NJDC Sooda TierDeveloper Lattice Data Mapper NObject Dali NPersist...
O czym nie powiedziałem Odwzorowywanie relacji Odwzorowanie kolekcji Adnotacje, atrybuty Cykl życia trwałych obiektów HQL Hibernate Query Language Cache...
Źródła Hibernate. Od nowicjusza do profesjonalisty, D.Minter, J.Linwood, Power Net 2007 NHibernate Reference Documentation, v.1.2.0 http://sourceforge.net/projects/nhibernate/
Dziękuję za uwagę