Journey to Hibernate (Part 2)

Ok.. mumpung ada waktu 30 menitan, gw lanjutin deh tulisan gw mengenai Hibernate πŸ™‚

Semoga tulisan saya di part 1 dapat dimengerti πŸ™‚ setidaknya itu latar belakang menurut gw mengapa ORM itu ada. Jadi sekali lagi Relational Database cukup bertolak belakang dengan desain Object Oriented 😦 dalam artian implementasinya dalam aplikasi. Biar lebih dimengerti gw mo bandingkan bagaimana implementasi dari desain class pada part 1 dengan menggunakan plain JDBC dan kemudian ditulisan berikutnya diimplementasikan dengan Hibernate. Berdasarkan desain class di part 1 kurang lebih saya akan memiliki 4 class yaitu Matakuliah dan Mahasiswa dan ada 2 class tambahan sebagai class Utility yaitu MahasiswaManager dan MatakuliahManager. (mungkin ini bukan implementasi yang terbaik menggunakan JDBC hehehe.. bisa juga pake DAO pattern). Berikut potongan-potongan kodenya:


class Mahasiswa{
String noInduk;
String nama;
List listMatakuliah = new ArrayList();

public Mahasiswa(){}

//seter and geter method here...
}

class Matakuliah{
String kode;
String nama;
int sks;

public Matakuliah(){}

//seter and geter method here...
}

Biar gak panjang ngetiknya seter dan geter methodnya dibuat sendiri ya πŸ™‚
Selanjutnya kita buatkan 2 class Utility yaitu MahasiswaManager dan MatakuliahManager. 2 class ini akan memiliki method-method untuk menyimpan data Matakuliah dan Mahasiswa ke database. Barikut potongan kodenya:


class MatakuliahManager{
public int insert(Matakuliah mtk){
int result = 0;
Statement st = null;
try{
st = coonection.createStatement();
result = st.executeUpdate("Insert into tmatakuliah(kode,nama,sks) " +
"VALUES('"+mkt.getKode()+"','"+mtk.getNama()+"',"+mtk.getSks()+")");
}catch(Exception ex){
}finally{
if(st!=null)
st.close();
}
return result;
}

public Matakuliah load(String kode){
Matakuliah mtk = null;
ResultSet rs = null;
Statement st = null;
try{
st = coonection.createStatement();
rs = st.executeQuery("SELECT kode,nama,sks FROM tmatakuliah WHERE
kode='"+kode+"'");
if(rs.next()){
mtk = new Matakuliah();
mtk.setKode(rs.getString(1));
mtk.setNama(rs.getString(2));
mtk.setSks(rs.getInt(3));
}
}catch(Exception ex){
}finally{
if(st!=null)
st.close();
}
return mtk;
}
}

Aduh capek juga ngetiknya… tapi ok deh.. gw tetap lanjut πŸ™‚ Berikut class utility untuk Mahasiswa

class MahasiswaManager{
public void insert(Mahasiswa mhs){
Statement st = null;
try{
st = coonection.createStatement();
for(int x=0;x

Journey to Hibernate (part 1)

Saya pingin skali nulis tentang Hibernate, mulai dari pengenalannya sampai nanti studi kasusnya. Tulisan ini saya akan bagi jadi beberapa bagian, kalo dah capek ngetik bersambung ke tulisan berikutnya πŸ™‚ Jadi bersabar ya..

Object Relational Mapping

Bagi para programmer mungkin pernah mengalami dimana sebuah aplikasi database yang dibuat dan sudah hampir selesai ternyata harus mengalamai perubahan pada struktur databasenya. Jika hal ini terjadi maka mau tidak mau aplikasi tadi harus direfactor (dilakukan perubahan) khususnya bagian program yang berhubungan dengan database. Ratusan atau bahkan ribuan baris kode program khususnya perintah-perintah SQLnya harus disesuaikan dan dites lagi. Tentunya ini bukan merupakan perkerjaan yang menyenangkan dan sudah tentu tidak efisien karena akan memakan waktu yang relatif lama.

Object Oriented Programming (OOP) adalah sebuah paradigma pemrograman yang menggunakan object untuk medesain aplikasi. Dengan pendekatan OOP desain sebuah aplikasi menjadi lebih mudah. Sebagai ilustrasi misalnya ada kasus berikut: β€œSeorang mahasiswa dapat mengikuti 1 atau lebih matakuliah”. Maka, dengan pendekatan OOP dapat digambarkan objek-objek dalam diagram kelas sebagai berikut:

hbm1.jpg

Jika diimplementasikan dalam relational database maka akan diciptakan table-tabel berikut beserta dengan relasinya

hbm2.jpg

 

Dari gambar diagram kelas dan relasi database di atas, terlihat bahwa ada perbedaan antara OOP dengan Relational Database. Pada diagram kelas hanya terdapat 2 buah objek yang digunakan, sedangkan pada relasi database terdapat 3 tabel untuk kasus di atas.

Dengan OOP mendesain aplikasi menjadi lebih mudah, tetapi sebaliknya tidak mudah diimplementasikan dalam program. Pada kasus di atas apabila akan diciptakan sebuah objek Mahasiswa, maka kode program dibuat sedemikian rupa untuk membaca isi database dari 3 tabel tersebut, kemudian data tersebut dikonversi menjadi objek Mahasiswa baru kemudian dapat digunakan dalam aplikasi. Demikian juga kalau akan menyimpan objek Mahasiswa, maka program harus melakukan proses untuk mengkonversi objek Mahasiswa menjadi data yang dapat disimpan ke dalam table-tabel tersebut…

Cukup dulu untuk hari ini… πŸ˜‰