Archive for November, 2007

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<mhs.getListMatakuliah().size()-1;x++){
Matakuliah mtk = (Matakuliah)mhs.getListMatakuliah().get(x);
st.executeUpdate("insert into tregistrasi(noInduk,kode)
values('"+mhs.getNoInduk()+"','"+mtk.getKode()+"')");
}
st.executeUpdate("insert into
tmahasiswa(noInduk,nama)values('"+mhs.getNoInduk()+"','"+mhs.getNama()+"')");
}catch(Exception ex){
}finally{
if(st!=null)
st.close();
}
}

public Mahasiswa load(String noInduk){
ResultSet rs = null;
Statement st = null;
Mahasiswa mhs = null;

try{
st = coonection.createStatement();
rs = st.executeQuery("select kode,nama from tmahasiswa");
if(rs.next()){
mhs = new Mahasiswa();
mhs.setNoInduk(rs.getString(1));
mhs.setNama(rs.getString(2));
rs.close();
rs = st.executeQuery("select noInduk,kode from tregistrasi where
noInduk='"+mhs.getNoInduk()+"'");
while(rs.next()){
mhs.getListMatakuliah().add(new Matakuliah().load(rs.getString(2)));
}
}
}catch(Exception ex){
}finally{
if(st!=null)
st.close();
}
return mhs;
}
}

fiuuuuhhhh… capek nulisnya nih :( mudah-mudahan gak ada yang keliru :)
Ok.. yang kita perhatikan adalah 2 class Utility di atas. Seperti yang sudah dijelaskan 2 class ini digunakan untuk menyimpan dan membaca object-object Matakuliah dan Mahasiswa. Terlihat bahwa di setiap method insert() object-object yang akan disimpan harus diekstrak datanya dan menjadi perintah sql lalu dieksekusi ke database. Sebaliknya saat membaca data terilihat bahwa data-data dari database/table maksud saya, harus dikonversi dulu menjadi object-object yang sesuai.

Bayangkan pada aplikasi besar yang terdiri dari banyak table/object maka bentuk-bentuk seperti ini akan sering dibuat :( melelahkan…
belum lagi apa bila saat development ternyata terjadi perubahan struktur pada tabel.. mmmmmm… bisa dibayangkan berapa banyak sql yang harus diubah dan dites :(

Tentunya ini tidak salah :) tetapi kurang efisien.. banyak aplikasi yang sudah dikembangkan menggunakan plain JDBC dan tetap stabil sampai sekarang.. termasuk beberapa project yang pernah saya buat hehehehe…

Ok deh.. udah dulu ya.. semoga dimengerti :)

6 comments November 9, 2007

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… ;)

 

2 comments November 7, 2007


 

November 2007
M T W T F S S
« Oct   Jan »
 1234
567891011
12131415161718
19202122232425
2627282930  

a

Recent Posts

Recent Comments

Hendro Steven on Photos
Hendro Steven on Java Video Tutorial
cad_enter on Membangun GUI dengan Netb…
Ferdian Rahabista on Java Video Tutorial
udin on Contoh Aplikasi Swing dengan…

Top Posts

Archives

Blogroll

Blog Stats

Tags

demo java jamu Java pengunjung selamat seminar java tulisan java tutorial java