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ę