Obat Kuat itu bernama Nhibernate

Ternyata saya telah koding selama 6 bulan untuk satu project. Disela-sela itu telah 2 project saya habisi. Badan tetap segar-bugar,pikiran tetap jernih. Kalo sakit punggung atau masuk angin sih biasa,yang penting masih ada sukarelawan yang mau mijit dan ngeroki. Semuanya akan lancar….ewes-ewes metu angine

 

Saya baru pertama kali menggunakan Nhibernate kedalam project. Awal-awal agak kesulitan. Seperti males membuat mapping databasenya di XML. Kemudian menangani Session Nhibernate agar hidup terus. Pola Parent-Child Mapping yang sampai kini belum sreg dihati. Joining tabel dengan ICreteria agar tidak perlu menulis SQL lagi. Menggunakan Generic di Nhibernate. Dan permasalahan-permasalahan lainnya yang pasti sebentar lagi akan muncul….

 

Tapi tidak masalah. Saya menikmatinya….Nhibernate benar-benar menghemat energi. Tidak ada lagi perintah select, Insert,update ,delete lagi. Semua diserahkan ke Mr. Nhibernate. Kita tinggal membuat domain object,dimodelkan dan terakhir seharusnya dibuatkan Unit Testingnya. Tapi yang terakhir ini enggak kesampaian.Menyesalnya ketika class-class yang dibuat telah bejibun…

 

Setelah itu tinggal mainkan rumusnya. Requirement dari client berubah(OK). Boss minta pernambahan fitur.(OK). Function yang dibuat salah atau tidak sesui dengan yang diharapkan (OK-OK aja tuh). Kamu mau dipecat karena tidak bisa kerja sama( Lha ini baru tidak OK). Salah saya apa ya?

Explore posts in the same categories: Software Development

20 Comments on “Obat Kuat itu bernama Nhibernate”

  1. Gwen Says:

    boleh contoh2 applikasi kecil yg menggunakan nHibernate, mau coba … tapi dari mana ? … Makasih ya

  2. Gwen Says:

    makasih atas responsenya

    saya mencoba dengan kombinasi FluentNHibernate, alasanya
    Mapping tidak menggunakan XML (mungkin lebih familiar)

    untuk insert saya bisa, session.Save()
    tapi kalo mau update/delete data berdasarkan criteria tertentu belum tahu, cari2 di google lom ketemu, mohon pencerahannya

    TK

    • Benk Says:

      Pake Castle saja mas, tidak menggunakan XML Mapping lagi. Untuk update object diambil kemudian untuk meng-updatenya tinggal pake diupdate. Di NHibernate ada function Update() atau SaveUpdateCopy() untuk mengupdate record.

      • Gwen Says:

        ada contoh hapus data atau edit data dengan menggunakan castle mas, memang di referense ada seh, sudah saya tambahkan, cuma penggunaannya masih belum tahu, atau ada referensi link untuk castle tsb

        TK

  3. Gwen Says:

    mau tanya mas
    misal saya punya data
    NIS = “90101″ -> ID
    Nama = “Aisha”
    Kelas = “1B”

    NIS = “91011″
    Nama = “Rizki”
    Kelas = “1B”

    update menggunakan nHibernate yang Kelas 1B menjadi 2A, bagaimana caranya ?

    Karena di session.Update(obj) tidak ada untuk memberikan kondisi, hanya berdasarkan ID

    TK

  4. pristobenk Says:

    untuk men-updatenya ambil obejct yang akan diupdate, ganti value di objectnya kemudian tinggal di update.
    Misalnya nama classnya Mahasiswa

    Mahasiswa mhs=s.Get(typeof(Mahasiswa),’90101′) as Mahasiswa;

    mhs.Kelas=”2A”;//ganti kelas ke 2A
    s.Update(mhs);
    s.flush();

    coba lihat dokumentasi Nhibernate yang terbaru. Kalo saya sih lebih menyarankan pake Castle saja dari FluentNHibernate.

  5. Wizard Says:

    Hi,
    Saya tertarik pada statement anda yang ini:
    “Setelah itu tinggal mainkan rumusnya. Requirement dari client berubah(OK). Boss minta pernambahan fitur.(OK). Function yang dibuat salah atau tidak sesui dengan yang diharapkan (OK-OK aja tuh).”
    Apa bener mas kalo dengan NHibernate, ketika ada requirement dari client berubah(misalnya minta tambah field di tabel), kita lebih mudah melakukan perubahan di aplikasi kita? Terus ketika bos minta penambahan fitur, kita juga lebih mudah melakukan penambahan fitur di aplikasi kita? Kira-kira apa saja yang harus diubah kalau client kita minta perubahan? Saya dengar dari temen saya katanya NHibernate membuat aplikasi kita lebih mudah di maintain (khususnya dalam menghadapi perubahan), apa itu bener mas?
    Sori banyak tanya nih, masi beginner soalnya hehehe..
    Matur nuwun.

    • pristobenk Says:

      Selama ini masih statement SQL standart? Bagaimana rasanya? capek kan nulis Insert,update,delete,select melulu.Energinya banyak terbuang karena pas menulis kode tersebut harus konsentrasi extra kan?

      NHiberntae sebenarnya cuma mempermudah, pekerjaan yang bertele2 seperti diatas semua bisa dikerjakan oleh NHibernate.Kalo masalah flexible dan ketangguhan aplikasi kita buat terhadap perubahan tergantung pada design yang kita buat bukan pada NHibernate. NHibernate cuma menyelaraskan saja dengan domain object yang dibentuk.

      Untuk membuat bagaimana system yang terbuka terhadap perubahan silahkan pelajari pola2 design patternnya GoF.Ada banyak pola disitu.Untuk mengimplemtasikan NHibernte bisa pake Active Recordnya CastleProject.

  6. Wizard Says:

    Iyup, masi pake sql statement standard, biasa masukin ke stored procedure. Emang sih yang ditawarkan NHibernate itu. Btw, perna denger dari temen katanya kalo ada perubahan di field table db, kita tinggal ubah/update NHibernate aja, nanti otomatis NHibernate yang akan update table di db, apa itu bener mas? Mohon pencerahan hehehehe…
    Btw, ada contoh/tutorial NHibernate pake stored procedure?
    Kalo dari performance, ada yang bilang NHibernate bikin aplikasi jadi lambat, apa bener itu mas?
    Active Record CP uda ada stable releasenya mas? Saya lihat di websitenya masi release candidate. Sebenarnya Active Record CP tuh buat apaan mas? Mohon pencerahan mas hehehehe…
    Thanks a lot.

  7. pristobenk Says:

    Betul Mas! kalo sdh bikin Class Domainnya tinggal pake CreateSchema() maka semua tabel + relasinya akan dibuat sama Nibernate.Kalo Aplikasi jadi lambat? lambat dalam artian apa?kalo ambil 1000 record dengan NHibernate dibandingkan dengan Query biasa ya itu betul,tergantung class yang dibuat relasi dengan berapa class lainnya.Harus pinter2 buat statement HQLnya. Tapi kalo mau make strored procedure/atau native query bisa memanfaatkan Sessionnya NHibernate kemudian proses selanjutnya seperti pake ADO.NET biasa. Ini samplenya semoga bisa membantu.

    private static object ExecuteNonQuery(NHibernate.ISession s, object instance)
    {
    bool result = true ;
    //IDbConnection conn = s.Connection;
    IDbCommand cmd = s.Connection.CreateCommand();
    cmd.CommandText = _SQL ;
    try
    {
    cmd.ExecuteNonQuery();
    }
    catch (Exception e)
    {
    result = false;
    throw new Exception(e.Message);
    }
    return (object)result ;
    }
    public static bool ExecuteNonQuery(string sql)
    {

    _SQL = sql;

    try
    {
    ActiveRecordMediator.Execute(typeof(ActiveRecordBase), new NHibernateDelegate(ExecuteNonQuery), null);
    }
    catch (Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    return false;
    }

    return true;

    }

  8. Wizard Says:

    Oo..iya sih mas, aku juga pikir pasti bakal lebih lambat. Tapi lebih lambat berapa persen ya mas kalo misalnya kita bandingin NHibernate dengan ADO.NET retrieve 1000 record data? Sudah pernah melakukan perbandingan belum mas?
    Di contoh yang mas kasi itu, berarti nanti kita tinggal call method ExecuteNonQuery (yang kedua) dengan memasukkan parameter nama stored procedure yang mau dieksekusi yah?
    Btw, mohon penjelasan dikit dong mas tentang active record castle project. Itu buat apaan ya mas? dan kenapa NHibernate di combine dengan itu? Yang aku baca-baca NHibernate biasanya dicombine dengan spring.net.
    Thanks banget yah mas udah mau share ilmu dan pengalamannya.
    Sukses selalu :)

  9. Wizard Says:

    Mas tanya lagi nih, hehehe..
    NHibernate sudah support sql server 2008 belum yah?
    Please respond secepatnya ya mas.
    Thanks a lot.

    • pristobenk Says:

      Aku belum nyoba Sql Server 2008, seharusnya gak masalah…Active Record CP itu sebenarnya pola patten juga untuk menyelesaikan masalah, salah satu design pattern-nya martin fowler (www.martinfowler.com) kalo gak salah. Intinya satu untuk mempermudah pekerjaan,coba saja explore nanti juga tau jawabannya sendiri. Spring.NET bagus juga..tetapi saya belum sempat explore lebih jauh…

  10. Wizard Says:

    Mas Benk, mau tanya dikit tentang unit testing di NHibernate itu seperti apa mas? Mohon dijelasin sedikit, dan kalo bs sama contohnya plus referensinya juga hehehe…
    Matur Nuwun mas…

  11. Wizard Says:

    Mas Benk, tanya lagi nih, tadi kelupaan hehehe…
    Itu CreateSchema nya gmn mas? Ada contohnya atau mungkin referensinya?
    Matur Nuwun mas…

    • pristobenk Says:

      Create Schema itu pas pertama kali kita menjalankan aplikasi untuk me-generate tabel. Kalo sdh punya database terus CreateSchemanya lupa di remark atau dihilangkan maka otomatis semua data hilang semua jadi tabel baru semua.

      ActiveRecordStarter.ResetInitializationFlag();

      Hashtable properties = new Hashtable();

      SettingDatabase sd = new SettingDatabase();//buat class sendiri mas..

      if (sd.EnumDbConnection == enumDbConnection.MsSQL2000)
      {

      properties.Add(“hibernate.connection.driver_class”, “NHibernate.Driver.SqlClientDriver”);
      properties.Add(“hibernate.dialect”, “NHibernate.Dialect.MsSql2000Dialect “);
      properties.Add(“hibernate.connection.provider”, “NHibernate.Connection.DriverConnectionProvider”);
      properties.Add(“hibernate.connection.connection_string”, path);
      }

      if (sd.EnumDbConnection == enumDbConnection.MySQL)
      {

      properties.Add(“hibernate.connection.driver_class”, “NHibernate.Driver.MySqlDataDriver”);
      properties.Add(“hibernate.dialect”, “NHibernate.Dialect.MySQLDialect “);
      properties.Add(“hibernate.connection.provider”, “NHibernate.Connection.DriverConnectionProvider”);
      properties.Add(“hibernate.connection.connection_string”, path);
      }
      if (sd.EnumDbConnection == enumDbConnection.SQLite)
      {
      path = “your path db”;

      properties.Add(“hibernate.connection.driver_class”, “NHibernate.Driver.SQLiteDriver”);
      properties.Add(“hibernate.dialect”, “NHibernate.Dialect.SQLiteDialect “);
      properties.Add(“hibernate.connection.provider”, “NHibernate.Connection.DriverConnectionProvider”);
      properties.Add(“hibernate.connection.connection_string”, path);
      }

      InPlaceConfigurationSource source = new InPlaceConfigurationSource();

      source.Add(typeof(ActiveRecordBase), properties);

      Assembly asm1 = Assembly.Load(“your domain object”);

      ActiveRecordStarter.Initialize(asm1, source);

      ActiveRecordStarter.CreateSchema();

  12. Gwen Says:

    huh, saya masih bermimpi menggunakan NHibernate and Castle.ActiveRecord, to Senior kalo ada contoh app kecil yang sudah mencakup insert delete dll, mohon dong di sharing, newbie …. terima kasih sebelumnya


Comment: