• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Nhibernate -Co ban
 

Nhibernate -Co ban

on

  • 4,390 views

 

Statistics

Views

Total Views
4,390
Views on SlideShare
4,386
Embed Views
4

Actions

Likes
1
Downloads
238
Comments
3

1 Embed 4

http://www.slideshare.net 4

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

13 of 3 previous next Post a comment

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Hic. Các bác này translate = google rồi paste vào slide ah. :( chẳng tôn trọng người đọc tý nào
    Are you sure you want to
    Your message goes here
    Processing…
  • mình cũng muốn tìm hiểu cơ bản về nó, chưa nắm rõ đc nhìu nên mong muốn đc các bạn giúp đỡ. Chân thành cảm ơn các bạn, mong đc tìm hiểu sớm ... :D
    Email: nhtung.2309@gmail.com
    Are you sure you want to
    Your message goes here
    Processing…
  • xin chao anh chi hien tai em dang lam de tai ve NHibernat, anh chi co the vui long chi cho em nguon tai lieu hoac cho em xin bai mau cua anh chi de tham khao duoc ko ah....
    Em chan thanh cam on anh chi.....
    Email: Songthan_ko@yahoo.com
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Nhibernate -Co ban Nhibernate -Co ban Presentation Transcript

    • NHibernate
      Sinhviênthựchiện:
      • 07k1034_Huỳnh HồAnhĐức
      • 07k1094_Phạm ThịTúNhi
      • 07k1099_Vũ ĐỗHồngNhung
    • I. Môtả
    • I. Môtả
      KháiNiệm
      LịchSử
      Chứcnăng
    • What’s Nhibernate?
      ?
    • 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)
    • II. HoạtĐộng
    • TìmhiểuNhibernate
    • 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:UsersAnhDucDesktopNhibernate-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
    • Demo tạovàCàiđặtNhibernate
    • tạovàCàiđặtNhibernate
    • B1 :Tao 1 Folder ở nơibạnthích(desktop)
    • 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
    • B4: tạoClassLibrary (thuvienNhibernate)
    • B5.tạo Application (ApliNhibernate) lưuvào Folder mới (Apli) rồilưu folder nàyvào Solution củabạn
    • Giaodiệncủa Solution củabạnsẽnhưthếnày
    • 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
    • LớpđầutiênđặttênSinhVien.cs: cókhaibáonhưsau :
    • 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; }
      }
      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; }
      }
      }
      }
    • 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
    • Properties thêm schema đếntập tinSinhVien.Bhm.xml
    • <?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:UsersAnhDucDesktopNHibernate_1SinhVienNhibernate huvienNhibernateQLSinhVien.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ệ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;
      }
    • Examining INSERTs with NHibernate
    • INSERT
      public static void Add(SinhViensv)
      {
      ISession session = NHibernateHelper.GetCurrentSession();
      ITransaction transaction = session.BeginTransaction();
      session.Save(sv);
      session.Flush();
      transaction.Commit();
      NHibernateHelper.CloseSession();
      }
    • Examining DELETEs with NHibernate
    • DELETE
      public static void Add(SinhViensv)
      {
      ISession session = NHibernateHelper.GetCurrentSession();
      ITransaction transaction = session.BeginTransaction();
      session.Delete(sv);
      session.Flush();
      transaction.Commit();
      NHibernateHelper.CloseSession();
      }
    • Examining UPDATEs with NHibernate
    • UPDATE
      public static void Add(SinhViensv)
      {
      ISession session = NHibernateHelper.GetCurrentSession();
      ITransaction transaction = session.BeginTransaction();
      session.Update(sv);
      session.Flush();
      transaction.Commit();
      NHibernateHelper.CloseSession();
      }
    • INDENTIFYING ANNOYANCES IN THESE USAGE PATTERN
      • Allows call like session.SaveOrUpdate(sv);
      • Nhibernate will …
      Check if the object is in the sesion
      If its not there,call Implicit Save(sv);
      If its there ,check to see it the object is “dirty”(changed)
      If its dirty,call implicit Update(sv);
      • SaveOrUpdate() relieves us of having to keep track of “dirty” state ourselves
    • 6. CRUD hoạtđộng
      Hệthốngđãsẵnsàngđểbắtđầu. Đãthựchiệnthànhcôngtênmiền, quyđịnhcáctập tin Mapping vàNHibernateConfig. CuốicùngđãsửdụngNHibernateđểtựđộngtạoracáclượcđồ CSDL từtênmiền(vàcáctập tin lậpbảnđồ)
      Giaodiệnrepositorylàmộtphầncủatênmiền
    • Thêmmộtthưmục BUS thuộcdựánSinhVienNHibernate.
      Thêmmộtgiaodiện class cótênSinhVienBUS. Xácđịnhcácgiaodiệnsau :
      using System;
      using System.Collections.Generic;
      namespace ThuVienNHibernate.BUS
      { (
      public class SinhVienTruyvanBUS
      { (
      public static void AddSv(SinhViensv);
      public static void RemoveSv(SinhViensv);
      public static void UpdateSv(SinhViensv);
      } )
      } )
    • Dòng_SessionFactory = config.BuildSessionFactory()
      Đâylàmộtquátrìnhtốnkémvà do đónênđượcthựchiệnchỉmộtlần. Đólàlý do tạisaođặtnóvàophươngphápnàylàchỉthựchiệnmộtlầntrongmộtchukỳkiểmtra
      Đểgiữhiệulựcthửnghiệmcácphươngpháp, lạitạora CSDL schema trướckhithựchiệnmỗiphươngphápthửnghiệm.
    • ĐólàbởivìNHibernatelàtheomặcđịnhcấuhìnhđểsửdụngtải lazychotấtcảcácthựcthể. Đólàcáchtiếpcậnđềnghịvàtôikhuyênbạnnênnồngnhiệtkhôngphảiđểthayđổinóchotốiđalàtínhlinhhoạt
    • BâygiờđãsẵnsàngđểthựchiệncácphươngphápkháccũngcủaRepository
      Đốivớithửnghiệmnày, thayvìsẽcómộtkholưutrữ (cónghĩalà CSDL bảng) đãcóchứamộtsốsảnphẩm. ChỉcầnthêmmộtphươngphápđểCreateInitialDatalớpkiểmtra
    • Cảmơnmọingườiđãquantâmtheodõi!!!
      Chúcthànhcông!!!