590 likes | 733 Views
NHibernate. S inh viên thực hiện : 07k1034_Huỳnh Hồ Anh Đức 07k1094_Phạm Thị Tú Nhi 07k1099_Vũ Đỗ Hồng Nhung. I. Mô tả. I. Mô tả. Khái Niệm Lịch Sử Chức năng. What’s Nhibernate ?. ?.
E N D
NHibernate Sinhviênthựchiện: 07k1034_Huỳnh HồAnhĐức 07k1094_Phạm ThịTúNhi 07k1099_Vũ ĐỗHồngNhung
I. Môtả • KháiNiệm • LịchSử • Chứcnăng
NHibernatelàmộtcảngcủaHibernate Corecho Java vào Framework. NETvàmộtsốứngdụngkhác. Nókiêntrìxửlýcácđốitượngđồngbằng NET. ĐếnvàtừmộtCSDL quanhệcơbản. Vớimộtmôtả XML củacácthựcthểvàmốiquanhệ. NHibernatetựđộngtạo SQL chotảivàlưutrữcácđốitượng. NHibernatekhôngphảitheomộtmôhìnhlậptrìnhhạnchế.
Cáclớphọcliêntụckhôngcầnphảithựchiệnbấtkỳgiaodiện hay kếthừatừmộtlớpcơsởđặcbiệt Điềunàylàmchonócóthểthiếtkế logic kinhdoanhbằngcáchsửdụngđồngbằng NET (. CLR) cácđốitượngvàthànhngữhướngđốitượng NHibernatekhôngphảitheomộtmôhìnhlậptrìnhhạnchế Cáclớphọcliêntụckhôngcầnphảithựchiệnbấtkỳgiaodiện hay kếthừatừmộtlớpcơsởđặcbiệt Điềunàylàmchonócóthểthiếtkế logic kinhdoanhbằngcáchsửdụngđồngbằng NET (. CLR) cácđốitượngvàthànhngữhướngđốitượng.
NHibernateđượcbắtđầubởi Tom Barrett, vàsauđóđượcchỉnhsửabởi Mike Doerflervà Peter Smulovics. • Vàocuốinăm 2005, JBoss , Inc (nay làmộtphầncủaRed Hat ) thuê Sergey Koshcheyev, sauđódẫndắtvàpháttriểnNHibernate, đểlàmviệctoànthờigiantrêncácphiênbảntươnglai • Vàocuốinăm 2006 JBossngừnghỗtrợđểdựánnày; ngày nay nóhoàntoànpháttriểnvà do cộngđồng.
CÁC PHIÊN BẢN CỦA NHIBERNATE • Phiênbản 1.0 đượcnhânđôicáctínhnăngthiếtlậpcủa Hibernate 2.1, cũngnhưmộtsốtínhnăngtừ Hibernate 3. • . NHibernate 1.2.1, pháthànhvàothángmườimộtnăm 2007 , đượcgiớithiệuthêmnhiềutínhnăngtừ Hibernate 3 vàhỗtrợcho, NET. 2,0 stored procedures , generics, vàcácloạinullable. • NHibernate 2,0 đãđượcpháthànhngày 23 ThángTám 2008 Nóđược so sánhvới Hibernate 3.2 vềtínhnăng.Vớiphiênbản 2.0 pháthành, NHibernatebỏhỗtrợ 1.1. NET • NHibernate 2,1 đãđượcpháthành 17 tháng 7 năm 2009. • NHibernate 3,0 sẽlàphiênbảnđầutiênsửdụng NET 3.5..
cáctínhnăngchính • TínhnăngchínhcủaNHibernatelàánhxạtừcácloại NET. lớphọc CSDL đểbàn (và CLR từdữliệuSQLcácloạidữliệu) • Natural programming model - Môhìnhlậptrìnhtựnhiên - NHibernatehỗtrợthànhngữ OO tựnhiên; thừakế, đahình, thànhphần, cácbộsưutập, baogồmcảcácbộsưutậpchung • Support for fine-grained object models .Hỗtrợchocácmôhìnhđốitượnghạttinh - mộtloạiphongphúcủacácánhxạchocácbộsưutậpvàphụthuộccácđốitượng
cáctínhnăngchính • No build-time bytecode enhancement .Khôngcóthờigiantăngcườngbytecode-xâydựng - khôngcómãsốthếhệphụhoặccácbướcchếbiếnbytecodetrongthủtụcxâydựng • The query options -Cáctruyvấnlựachọn - NHibernateđịachỉcảhaimặtcủavấnđề; khôngchỉlàmthếnàođểcóđượccácđốitượngvào CSDL, màcònlàmthếnàođểcóđượchọtrởlại • Custom SQL - Custom SQL - xácđịnhchínhxácrằng SQL NHibernatenênsửdụngđểkéodàicácđốitượngcủabạn. Stored procedures are supported on Microsoft SQL Server. thủtụclưutrữđượchỗtrợtrên Microsoft SQL Server.
cáctínhnăngchính • Support for "conversations“- Hỗtrợcho "cuộchộithoại" - NHibernatehỗtrợhoàncảnhsốngbềnbỉ, lâudài, tháo / lắplạicủacácđốitượng, vàsẽchămsóccủakhóatựđộnglạcquan • NHibernatecũngcungcấpdữliệutruyvấnvàcácphươngtiệncứu • NHibernatetạoracáclệnh SQL vàgiúpcácnhàpháttriểntừdữliệuhướngdẫnsửdụngbộxửlývàchuyểnđổiđốitượng, lưugiữcácứngdụngdiđộngchohầuhếtcác CSDL SQL, với Portability CSDL trênkhôngthựchiệngiaotạirấtít • Free/open source - Miễnphí / mãnguồnmở - NHibernateđượccấpphéptheo LGPL (Lesser GNU Public License)
1. CàiĐặtNhibernate • Tảixuốngcáctập tin NHibernate-2.1.2.GA-bin • tạoramộtthưmụccótênNhibernate-Demo ngoàiDesktop (C:\Users\AnhDuc\Desktop\Nhibernate-Demo )vàgiảinéntập tin vừatải
TẠO DỰ ÁN • Đểbắtđầuxâydựng 1 dựánmới .Bạnthựchiệncácbướcsau Bước 1: Tao ra 1 Folder con tên “UngDungNhibernate”(tênnày do bạnđặtdùngđểchứatấtcả Project củabạn Bước 2: Mở VS 2005 (cácphiênbảnmớinhấtcủa VS) tạo 1 Solution co tên “Nhibernate-Solution” Bước 3: Add 1 ClassLibraryđặttên “ThuVienNhibernate” Lớpthưviệnnày Bước 4: Create 1 Folder co tên “UngDung-Nhiberbate” đểchứaỨngdụngcủabạn Sauđâylà Demo tạovàCàiđặtNhbernate
B2:Tải NHibernate-2.1.2.GA-bin.zip (Google.com) lưuvàothưmụcvừatạogiảinénnó
B3:Mở VS(phiểnbảnnàocũngđược) tạo 1 solution đặttênnàobạnthích(demoNhibernate)lưunóvào folder bạntạo
B5.tạo Application (ApliNhibernate) lưuvào Folder mới (Apli) rồilưu folder nàyvào Solution củabạn
2. Xácđịnhđốitượngkinhdoanh • Cho phépbắtđầubằngcáchxácđịnhmộtmiềnrấtđơngiản: • Tạo 1 Folder cótên DTO thuộclớpthưviệnthuvienNhibernate(lớpthưviệntạotrướcđó) • Tạo 2 file nhưhìnhdưới
public string GioiTinh { get { return _GioiTinh; } set { _GioiTinh = value; } } public string DiaChi { get { return _DiaChi; } set { _DiaChi = value; } } public int MaLop1 { get { return MaLop; } set { MaLop = value; } } } } namespace thuvienNhibernate.DTO { public class SinhVien { private int _Mssv, MaLop,; private string _HoTen,; private string _GioiTinh; private string _DiaChi; public intMssv { get { return _Mssv; } set { _Mssv = value; } } public string HoTen { get { return _HoTen; } set { _HoTen = value; } }
3. XácđịnhBảnĐồ Đểcóthểtồntạitrườnghợpcủathựcthểnàytrongmột CSDL NHibernate (Mộtthểhiệncủamộtthựcthểtrongmiềntươngứngvớimộthàngtrongmộtbảngtrong CSDL) xácđịnhmộtánhxạgiữacácthựcthểvàbảngtươngứngtrong CSDL Lậpbảnđồnàycóthểđượcthựchiệnbằngcáchxácđịnhmộttập Mapping (DTO) hoặcbằngcáchtrangtrícácthựcthểcóthuộctính
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2“ namespace="thuvienNhibernate“ assembly="thuvienNhibernate"> <class name="SinhVien" table="SinhVien" lazy="false"> <id name="Mssv" column="Mssv" unsaved-value="0"> <generator class="native"/> </id> <property name="HoTen"> <column name="HoTen" not-null="true"/></property> <property name="GioiTinh"> <column name="GioiTinh" not-null="true"/> </property> <property name="DiaChi"> <column name="DiaChi" not-null="true"/> </property> <property name="MaLop"> <column name="MaLop" not-null="true"/> </property> </class> </hibernate-mapping>
Tươngtựtạotiếplớpthứ 2 :Lop.csvàcấuhìnhgiốnglớpSinhVien.cs
Trongmộttập tin bảnđồkhilớpthamchiếuđếnmộttênmiềnmàbạnluônphảicungcấptênđầyđủcủalớp • Đểthựchiệncác xml cóthểđịnhnghĩatênlắpráp (trongđócáclớpmiềnđượcthựchiệnvàkhônggiantêncủalớphọcmiềntrongcácthuộcassembly and namespacecủanútgốc. • Tươngtựnhưbáocáosửdụngtrong C # lầnđầutiênxácđịnhmộtkhóachínhchocácđơnvịsảnphẩm • Vềmặtkỹthuật : cóthểlấytêntàisảncủasảnphẩmkểtừkhitàisảnnàyphảiđượcxácđịnhvàphảiđượcduynhất
4. Cấu HÌNH nhIBERNATE NHibernatesởdữliệusảnphẩmmàmuốnsửdụngvàcungcấpchokếtnốicác chi tiếttronghìnhthứccủamộtchuỗikếtnối NHibernatehỗtrợcácsảnphẩm CSDL nhiều Thêmmột file xml mớichodựánthuvienNhibernatevàgọilàhibernate.cfg.xml Set its property " Copy to Output " to " Copy always "
Cấuhìnhnhưsau : <?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="dialect">NHibernate.Dialect.MsSqlCeDialect</property> <property name="connection.driver_class">NHibernate.Driver.SqlServerCeDriver</property> <property name="connection.connection_string">Data Source=C:\Users\AnhDuc\Desktop\NHibernate_1\SinhVienNhibernate\thuvienNhibernate\QLSinhVien.sdf;Max Database Size=2047</property> <property name="show_sql">True</property> </session-factory> </hibernate-configuration>
5. Cấu HÌNH nhIBERNATE Thêmmột CSDL trốngrỗng, gọilàQLSinhVien.sdfchodựánthuvienNhibernate(chọnCSDLđịaphươngnhưbảnmẫu)
KiỂM TRA CÁC THIẾT LẬP • Đầutiênxác minh cónhững file sautrongthưmục. Nhibernatetạo ở đầu file
Lưu ý: cácSystem.Data.SqlServerCe.dllnằm ở thưmục Desktop-sub Tấtcảcáctập tin kháccóthểtìmthấytrongthưmụcNHibernate
ThêmmộtthamchiếuđếncácdựánthuvienNhibernatetrongdựánthửnghiệmThêmmộtthamchiếuđếncácdựánthuvienNhibernatetrongdựánthửnghiệm • Thêmmộtbảnsaocủahibernate.cfg.xmlvàothưmụcgốccủadựánnàykiểmtrađơnvị. TrựctiếphànhđộngvớiNHibernatetrongdựánNUnitnhucầutruycậpvàocác file này
Ngoàirathêmtàiliệuthamkhảođể NHibernate.dll, nunit.framework.dllvàSystm.Data.SqlServerCe.dll
Copy tấtcảcác file “*. dll” nằmtrongNHibernate-2.1.2.GA-bin chovaophan Debug củaỨngDụng
Ta có Code : using System; Using System.Collections.Generic; using System.Linq; using System.Text; using thuvienNhibernate.DTO; using thuvienNhibernate; using System.Configuration; namespace thuvienNhibernate.DAO { public class SessionFactorys { private static NHibernate.ISessionFactory _SessionFactory; private static void Init() { NHibernate.Cfg.Configurationconfig = new NHibernate.Cfg.Configuration(); config.Configure(); config.AddAssembly("thuvienNhibernate"); _SessionFactory = config.BuildSessionFactory(); }
public static NHibernate.ISessionFactoryGetSessionFactory() { if (_SessionFactory == null) { Init(); } return _SessionFactory; } public static NHibernate.ISessionGetnewSession() { return GetSessionFactory().OpenSession(); } } }
THIẾT LẬP TRUY VẤN ĐẾN CSDL • Tạo class SinhVienTruyvan.cs .VớilớpnàytạocáchàmIsert ,Delete,Update,Load CSDL
SELECT public static DataTableGetTable() { DataTabledt = new DataTable(); OleDbConnectioncn; cn = DataProvider.ConnectionData(); string strSQL; strSQL = "Select * From Sach"; OleDbDataAdapterda; da = new OleDbDataAdapter(strSQL, cn); da.Fill(dt); cn.Close(); return dt; }
INSERT public static void Add(SinhViensv) { ISession session = NHibernateHelper.GetCurrentSession(); ITransaction transaction = session.BeginTransaction(); session.Save(sv); session.Flush(); transaction.Commit(); NHibernateHelper.CloseSession(); }
DELETE public static void Add(SinhViensv) { ISession session = NHibernateHelper.GetCurrentSession(); ITransaction transaction = session.BeginTransaction(); session.Delete(sv); session.Flush(); transaction.Commit(); NHibernateHelper.CloseSession(); }