Dapper .NET Micro-ORM Part 1
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 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.
Dapper .NET sendiri dibuat oleh om Sam Saffron salah seorang developer berbakat yang ada di belakang Stack Overflow.
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.
using System.Data.OleDb;
namespace SiswaDapperNET1
{
class Program
{
static void Main(string[] args)
{
using (var conn = GetOpenConnection())
{
var strSql = "SELECT nis, nama FROM siswa";
using (var cmd = new OleDbCommand(strSql, conn))
{
using (var dtr = 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 :
Sub Main()
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 Using
End Sub
Method Main di atas membutuhkan method GetOpenConnection yang digunakan untuk membuat koneksi ke database Ms Access.
private static OleDbConnection GetOpenConnection()
{
OleDbConnection conn = null;
try
{
var appDir = System.IO.Directory.GetCurrentDirectory();
var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + appDir + "\\SISWA.MDB;User Id=admin;Password=;";
conn = new OleDbConnection(strConn);
conn.Open();
}
catch (Exception)
{
}
return conn;
}
dan untuk programmer VB.NET
Private Function GetOpenConnection() As OleDbConnection
Dim conn As OleDbConnection = Nothing
Dim appDir As String = System.IO.Directory.GetCurrentDirectory()
Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + appDir + "\SISWA.MDB;User Id=admin;Password=;"
Try
conn = New OleDbConnection(strConn)
conn.Open()
Catch ex As Exception
End Try
Return conn
End Function
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.
Untuk kode lengkapnya seperti berikut :
public class Siswa
{
public string Nis { get; set; }
public string Nama { get; set; }
}
Jika menggunakan VB.NET kodenya terlihat lebih banyak
Public Class Siswa
Private _nis As String
Public Property Nis() As String
Get
Return _nis
End Get
Set(ByVal value As String)
_nis = value
End Set
End Property
Private _nama As String
Public Property Nama() As String
Get
Return _nama
End Get
Set(ByVal value As String)
_nama = value
End Set
End Property
End Class
Kemudian kita juga akan menambahkan sebuah method baru dengan nama GetDataSiswa, method ini akan mengembalikan kumpulan (collection) dari data siswa.
private static List<Siswa> GetDataSiswa()
{
var daftarSiswa = new List<Siswa>();
using (var conn = GetOpenConnection())
{
var strSql = "SELECT nis, nama FROM siswa";
using (var cmd = new OleDbCommand(strSql, conn))
{
using (var dtr = cmd.ExecuteReader())
{
while (dtr.Read())
{
// proses mapping dari row ke object
var siswa = new Siswa();
siswa.Nis = dtr["nis"] == null ? string.Empty : dtr.GetString(0);
siswa.Nama = dtr["nama"] == null ? string.Empty : dtr.GetString(1).ToUpper();
daftarSiswa.Add(siswa);
}
}
}
}
return daftarSiswa;
}
sementara di VB.NET akan terlihat seperti berikut :
Private Function GetDataSiswa() As List(Of Siswa)
Dim daftarSiswa As New List(Of Siswa)
Using conn As OleDbConnection = GetOpenConnection()
Dim strSql = "SELECT nis, nama FROM siswa"
Using cmd = New OleDbCommand(strSql, conn)
Using dtr As OleDbDataReader = cmd.ExecuteReader()
While dtr.Read()
Dim siswa As New Siswa()
With siswa
.Nis = IIf(IsDBNull(dtr("nis")), String.Empty, dtr("nis").ToString())
.Nama = IIf(IsDBNull(dtr("nama")), String.Empty, dtr("nama").ToString())
End With
daftarSiswa.Add (siswa)
End While
End Using
End Using
End Using
Return daftarSiswa
End Function
Terakhir kita akan melakukan revisi terhadap method Main diatas.
static void Main(string[] args)
{
/*
using (var conn = GetOpenConnection())
{
var strSql = "SELECT nis, nama FROM siswa";
using (var cmd = new OleDbCommand(strSql, conn))
{
using (var dtr = cmd.ExecuteReader())
{
Console.WriteLine("NIS\tNAMA");
Console.WriteLine("===================================");
while (dtr.Read())
{
Console.WriteLine(dtr["nis"] + "\t" + dtr["nama"].ToString().ToUpper());
}
}
}
}
*/
Console.WriteLine("NIS\tNAMA");
Console.WriteLine("===================================");
var daftarSiswa = GetDataSiswa();
foreach (var siswa in daftarSiswa)
{
Console.WriteLine(siswa.Nis + "\t" + siswa.Nama);
}
Console.ReadKey();
}
sekali lagi di VB.NET :
Sub Main()
'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 Using
Console.WriteLine ("NIS" & vbTab & "NAMA")
Console.WriteLine ("===================================")
Dim daftarSiswa = GetDataSiswa()
For Each siswa In daftarSiswa
Console.WriteLine (siswa.Nis & vbTab & siswa.Nama)
Next
Console.ReadKey()
End Sub
Jika program di atas dijalankan akan menghasilkan output seperti berikut :
Untuk penggunaan micro ORM Dapper .NET, insyaAllah akan kita mulai pembahasannya pada postingan berikutnya .
Selamat MENCOBA
Comments