Sudah lama saya ingin mengembangkan aplikasi menggunakan tool-tool ORM seperti ADO.NET Entity Framework, MyBatis, LINQ to SQL, NHibernate dan tool ORM lainnya.
Sempat sedikit serius untuk mempelajari NHibernate tapi… dengan alasan sok sibuk :D akhirnya stop ditengah jalan :(.
Masih belum menyerah saya pun mencoba mencari alternatif lain penggunaan tool ORM dengan melakukan pencarian menggunakan keyword “micro orm for .net” dari sekian banyak pilihan micro ORM yang ada pilihan saya jatuh ke Dapper .NET dengan pertimbangan micro ORM ini sudah digunakan oleh website besar seperti Stack Overflow, xpfest.com, helpdesk, worldcitycard, roadmap.
Sebelum menggunakan Dapper .NET kita lihat dulu bagaimana mengakses database menggunakan library ADO .NET secara langsung.
Contoh kasusnya sederhana kita akan menampilkan data Siswa dengan menggunakan bahasa pemrograman C# dan VB.NET sedangkan untuk databasenya menggunakan Ms Access.
1234567891011121314151617181920212223242526272829
usingSystem.Data.OleDb;namespaceSiswaDapperNET1{classProgram{staticvoidMain(string[]args){using(varconn=GetOpenConnection()){varstrSql="SELECT nis, nama FROM siswa";using(varcmd=newOleDbCommand(strSql,conn)){using(vardtr=cmd.ExecuteReader()){Console.WriteLine("NIS\tNAMA");Console.WriteLine("===================================");while(dtr.Read()){Console.WriteLine(dtr["nis"]+"\t"+dtr["nama"].ToString().ToUpper());}}}}Console.ReadKey();}}}
atau jika Anda menggunakan VB.NET kodenya akan terlihat seperti berikut :
12345678910111213141516171819
SubMain()UsingconnAsOleDbConnection=GetOpenConnection()DimstrSql="SELECT nis, nama FROM siswa"Usingcmd=NewOleDbCommand(strSql,conn)UsingdtrAsOleDbDataReader=cmd.ExecuteReader()Console.WriteLine("NIS"&vbTab&"NAMA")Console.WriteLine("===================================")Whiledtr.Read()Console.WriteLine(dtr("nis")&vbTab&dtr("nama"))EndWhileEndUsingEndUsingEndUsingEndSub
Method Main di atas membutuhkan method GetOpenConnection yang digunakan untuk membuat koneksi ke database Ms Access.
Selanjutnya kita akan memberikan sedikit sentuhan OOP terhadap kode di atas dengan melakukan mapping/pemetaan baris/row dari tabel menjadi objek.
Perhatikan ilustrasi berikut :
Mapping bisa dilakukan secara manual atau menggunakan tool ORM (Object Relational Mapping).
Untuk contoh di bawah ini kita melakukan mapping secara manual, tetapi sebelumnya kita harus membuat sebuah class terlebih dulu yang disebut dengan class entity/model.
Class ini merupakan representasi dari tabel-tabel yang ada di dalam sebuah database.
Berdasarkan tabel Siswa di atas, kita akan membuat sebuah class dengan nama Siswa, field/property dari class ini sama persis dengan field-field yang ada di tabel Siswa.
Kemudian kita juga akan menambahkan sebuah method baru dengan nama GetDataSiswa, method ini akan mengembalikan kumpulan (collection) dari data siswa.
1234567891011121314151617181920212223242526
privatestaticList<Siswa>GetDataSiswa(){vardaftarSiswa=newList<Siswa>();using(varconn=GetOpenConnection()){varstrSql="SELECT nis, nama FROM siswa";using(varcmd=newOleDbCommand(strSql,conn)){using(vardtr=cmd.ExecuteReader()){while(dtr.Read()){// proses mapping dari row ke objectvarsiswa=newSiswa();siswa.Nis=dtr["nis"]==null?string.Empty:dtr.GetString(0);siswa.Nama=dtr["nama"]==null?string.Empty:dtr.GetString(1).ToUpper();daftarSiswa.Add(siswa);}}}}returndaftarSiswa;}
sementara di VB.NET akan terlihat seperti berikut :
123456789101112131415161718192021222324252627
PrivateFunctionGetDataSiswa()AsList(OfSiswa)DimdaftarSiswaAsNewList(OfSiswa)UsingconnAsOleDbConnection=GetOpenConnection()DimstrSql="SELECT nis, nama FROM siswa"Usingcmd=NewOleDbCommand(strSql,conn)UsingdtrAsOleDbDataReader=cmd.ExecuteReader()Whiledtr.Read()DimsiswaAsNewSiswa()Withsiswa.Nis=IIf(IsDBNull(dtr("nis")),String.Empty,dtr("nis").ToString()).Nama=IIf(IsDBNull(dtr("nama")),String.Empty,dtr("nama").ToString())EndWithdaftarSiswa.Add(siswa)EndWhileEndUsingEndUsingEndUsingReturndaftarSiswaEndFunction
Terakhir kita akan melakukan revisi terhadap method Main diatas.
SubMain()'Using conn As OleDbConnection = GetOpenConnection()' Dim strSql = "SELECT nis, nama FROM siswa"' Using cmd = New OleDbCommand(strSql, conn)' Using dtr As OleDbDataReader = cmd.ExecuteReader()' Console.WriteLine("NIS" & vbTab & "NAMA")' Console.WriteLine("===================================")' While dtr.Read()' Console.WriteLine(dtr("nis") & vbTab & dtr("nama"))' End While' End Using' End Using'End UsingConsole.WriteLine("NIS"&vbTab&"NAMA")Console.WriteLine("===================================")DimdaftarSiswa=GetDataSiswa()ForEachsiswaIndaftarSiswaConsole.WriteLine(siswa.Nis&vbTab&siswa.Nama)NextConsole.ReadKey()EndSub
Jika program di atas dijalankan akan menghasilkan output seperti berikut :
Untuk penggunaan micro ORM Dapper .NET, insyaAllah akan kita mulai pembahasannya pada postingan berikutnya :D.