Query “SELECT * FROM Customers” kan mengambil seluruh record dalam tabel Customers
Karena terdiri dari banyak record sehingga dari proses mapping akan menghasilkan banyak objek
sesuai dengan jumlah recordnya. Jika kita berhubungan dengan banyak objek, maka kumpulan
objek ini harus diwadahi dalam container/tempat penyimpanna objek. Koleksi dari objek tersebu
dapat disimpan di tipe data Array atau class khusus untuk menangani collection seperti List. Class
List dapat digunakan jika kita memanggil namespace System.Collection. sedangkan jika ingin
menggunakan tipe Generic (List) bisa dipanggil namespace System.Collection.Generic.
Generic adalah fitur baru yang diperkenalkan di .NET Framework 2.0. Dengan menggunakan
generic data type yang digunakan lebih aman (type safe), karena kesalahan bisa diketahui pada
saat design time bukan pada saat runtime. Generic juga menghilangkan proses Casting yang
biasanya dilakukan jika kita berhubungan dengan tipe yang tidak sesuai. Pada method GetAll()
return value nya adalah sebuah List generic yang isi nya koleksi object class Customer yang
dihasilkan dari proses mapping dari record tabel Customers
Berikut ini modifikasi method GetAll() untuk pencarian Customer berdasarkan CustomerName
public List<Customer> FindByName(string companyName)
{
List<Customer> customer = new List<Customer>();
try
{
string sql = "SELECT * FROM Customers WHERE CompanyName LIKE ‘%"
+ companyName + "’";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Customer customer = new Customer();
customer.CustomerId = rdr["CustomerId"].ToString();
customer.CompanyName = rdr["CompanyName"].ToString();
customer.ContactName = rdr["ContactName"].ToString();
list.Add(customer);
}
}
catch (SqlException sqlex)
{
throw new Exception(sqlex.Message.ToString());
}
return list;
}
Oke cukup dengan bagian Read nya, bagaimana dengan Create, Update, dan Delete. Apakah bisa
kita perlakukan dengan pendekatan object mapping juga? Hmm.. mungkin lebih tepatnya object
dependency. Perhatikan contoh source code berikut :
public void Create(string customerId, string companyName)
{
try
{
string sql = "INSERT INTO Customers (CustomerID,CompanyName) "
+ "VALUES ('" + customerId + "','" + companyName + "')";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (SqlException sqlex)
{
throw new Exception(sqlex.Message.ToString());
}
}
Method Create yang digunakan untuk menambah row baru ke tabel Customer memiliki 2
parameter tipe primitive yaitu string. Karena kita sudah memiliki class Customer sebagai business
object maka sebaiknya gunakan parameter objek. Sehingga method Create memiliki dependency
ke class Customer
public void Create(Customer customer)
{
try
{
string sql = "INSERT INTO Customers (CustomerID,CompanyName) "
+ "VALUES ('" + customer.CustomerId + "','"
+ customer.CompanyName + "')";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (SqlException sqlex)
{
throw new Exception(sqlex.Message.ToString());
}
}
Update dan Delete
public void Update(Customer customer)
{
try
{
string sql = "UPDATE Customers SET CompanyName='" + customer.CompanyName
+ " WHERE CustomerId='" + customer.CustomerId + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (SqlException sqlex)
{
throw new Exception(sqlex.Message.ToString());
}
}
public void Delete(Customer customer)
{
try
{
string sql = "DELETE FROM Customers WHERE CustomerId='"
+ customer.CustomerId + "'";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (SqlException sqlex)
{
throw new Exception(sqlex.Message.ToString());
}
}
Cara Akses
Customer customer = new Customer();
customer.CustomerId = "XERS";
customer.CompanyName = "XERIS System Interface";
customer.ContactName = "Ari";
CustomerDao custDao = new CustomerDao();
custDao.Save(customer)
List<Customer> list = custDao.GetAll();
foreach (Customer cust in list)
{
Console.WriteLine(cust.CustomerId + "-" + cust.CompanyName);
}
0 Responses to “Object Mapping (Bagian 3)”