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?
Juni 1, 2009 at 1:02 am
boleh contoh2 applikasi kecil yg menggunakan nHibernate, mau coba … tapi dari mana ? … Makasih ya
Juni 1, 2009 at 3:54 am
coba masuk di http://www.castleproject.org masuk ke ActiveRecord. Castle ActiveRecord ini dibuat dengan nHibernate,sama http://www.nhibernate.org untuk dokumentasi nhibernatenya.
Juni 10, 2009 at 3:52 am
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
Juni 10, 2009 at 2:03 pm
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.
Juni 11, 2009 at 4:09 am
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
Juni 12, 2009 at 1:40 am
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
Juni 12, 2009 at 11:38 pm
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.
Juni 17, 2009 at 4:17 am
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.
Juni 17, 2009 at 5:42 am
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.
Juni 17, 2009 at 10:10 am
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.
Juni 17, 2009 at 10:29 pm
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;
}
Juni 18, 2009 at 1:20 am
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
Juni 18, 2009 at 6:46 am
Mas tanya lagi nih, hehehe..
NHibernate sudah support sql server 2008 belum yah?
Please respond secepatnya ya mas.
Thanks a lot.
Juni 18, 2009 at 2:52 pm
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…
Juni 26, 2009 at 1:21 am
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…
Juni 27, 2009 at 12:21 am
Unit testing di NHibernate sama saja dengan unit testing lainnya. bisa menggunakan NUnit coba lihat di http://www.Nunit.org
Juni 26, 2009 at 9:27 am
Mas Benk, tanya lagi nih, tadi kelupaan hehehe…
Itu CreateSchema nya gmn mas? Ada contohnya atau mungkin referensinya?
Matur Nuwun mas…
Juni 27, 2009 at 12:20 am
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();
Juli 28, 2009 at 8:02 am
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
Agustus 1, 2009 at 6:37 am
di http://www.castleproject.org ada sample-nya mas..