Pada artikel kali ini saya akan sedikit mengulas tentang bagaimana caranya mengintegrasikan Spring Framework dan Hibernate, karena saya juga baru belajar, jadi kritik dan saran sangat saya harapkan untuk kemajuan kita bersama. Agak sulit memang jika kita belajar sendiri tentang kedua teknologi ini, tidak ada tempat bertanya dan berbagi, tapi gudangnya ilmu siap membantu kapan pun dan dimanapun, source code dari program ini akan disertakan di artikel bagian terakhir, entah sampai part berapa, hahaha….
Disini saya tidak akan menjelaskan tentang apa dan bagaimana Spring dan Hibernate bekerja, jadi saya anggap anda sudah mengerti tentang kedua teknologi ini, saya pun jujur sebenarnya belum terlalu mengerti, Saya menggunakan Spring 3.0 dan hibernate 3, disini kita akan belajar membuat form crud dengan kedua teknologi tersebut, dari mulai save, update, delete, dll…Berikut susunan package nya, saya menggunakan eclipse untuk mendevelop program ini :
Dalam project ini, UI nya berada di package com.kusandriadi.mahasiswa.main, saya tidak akan membahas tentang UI tersebut..Oke, sekarang kita mulai dengan membuat pojo nya, kurang lebih seperti ini :
package com.kusandriadi.mahasiswa.bean;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
public class Mahasiswa {
@Id
@Column(name = "nim", nullable = false, length = 10)
private String nim;
private String nama;
private String tempat;
private Date tanggal_lahir;
private String jurusan;
private String jenkel;
private String alamat;
//getter dan setter disini
}
Disini kita menggunakan persistence untuk memperkenalkan class kita agar bisa dikenal oleh database, nantinya si hibernate akan membaca dan membuat table otomatis di database berdasarkan class Mahasiswa ini. Bisa kita lihat disini bahwa setiap Object di class Mahasiswa akan direpresentasikan sebagai 1 field dalam table, disini kita tidak perlu menggunakan @Table dan @Column, karena keluaran dari class ini akan sesuai dengan yang di database, jika kita ingin memberi nama sendiri, baru kita menggunakan kedua anotasi tersebut. Yah walaupun ketika table itu dibuat field nya tidak akan urut, tapi sesungguh nya itu normal dan tidak berpengaruh pada saat kita melakukan manipulasi database, karena dengan Hibernate, field di database akan dibuat 1 objek sendiri dalam program. Setelah kita membuat class Mahasiswa, kita akan membuat interface MahasiswaDao :
package com.kusandriadi.mahasiswa.dao;
import java.util.ArrayList;
import com.kusandriadi.mahasiswa.bean.Mahasiswa;
public interface MahasiswaDao {
public void insertMahasiswa(Mahasiswa mahasiswa);
public void updateMahasiswa(Mahasiswa mahasiswa);
public void deleteMahasiswa(Mahasiswa mahasiswa);
public Mahasiswa getMahasiswa(String mahasiswa);
public ArrayList<Mahasiswa> selectAll();
public ArrayList<Mahasiswa> moveDataFromTable(String nim);
public String autoNumber();
}Interface MahasiswaDao hanya berisi method-method kosong untuk membaca atau memanipulasi database, method-method disini adalah optional tergantung keadaan dan kasus yang dihadapi, beberapa tutorial yang saya temukan selalu menambahkan “throw Exception” pada setiap method, tapi begini juga boleh karena nantinya eksepsi tersebut akan ditulis pada kelas yang mengimplement interface tersebut, dalam hal ini class MahasiswaDaoInject :
package com.kusandriadi.mahasiswa.dao.inject;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.kusandriadi.mahasiswa.bean.Mahasiswa;
import com.kusandriadi.mahasiswa.dao.MahasiswaDao;
public class MahasiswaDaoInject extends HibernateDaoSupport implements MahasiswaDao{
@SuppressWarnings("unchecked")
@Override
public String autoNumber() {
List objectResult = getHibernateTemplate().find(
"select max(nim) as nim from Mahasiswa");
Mahasiswa mahasiswa = null;
for (Object resultElement : objectResult){
mahasiswa = new Mahasiswa();
mahasiswa.setNim((String)resultElement);
}
return mahasiswa.getNim();
}
@Override
@Transactional(readOnly=false, propagation=Propagation.REQUIRES_NEW)
public void deleteMahasiswa(Mahasiswa mahasiswa) {
try {
getHibernateTemplate().delete(mahasiswa);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
@Transactional(readOnly=false, propagation=Propagation.REQUIRES_NEW)
public void insertMahasiswa(Mahasiswa mahasiswa) {
try {
getHibernateTemplate().save(mahasiswa);
} catch (Exception e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
@Override
@Transactional(readOnly=true)
public ArrayList<Mahasiswa> moveDataFromTable(String nim) {
try {
List<Mahasiswa> list = getHibernateTemplate().find(
"FROM Mahasiswa WHERE nim = ?", nim);
ArrayList<Mahasiswa> maha = new ArrayList<Mahasiswa>();
Mahasiswa mahasiswa = null;
for(Mahasiswa mhs : list){
mahasiswa = new Mahasiswa();
mahasiswa.setNim(mhs.getNim());
mahasiswa.setNama(mhs.getNama());
mahasiswa.setTempat(mhs.getTempat());
mahasiswa.setTanggal_lahir(mhs.getTanggal_lahir());
mahasiswa.setJurusan(mhs.getJurusan());
mahasiswa.setJenkel(mhs.getJenkel());
mahasiswa.setAlamat(mhs.getAlamat());
maha.add(mahasiswa);
}
return maha;
} catch (HibernateException e) {
e.printStackTrace();
return null;
}
}
@Override
@Transactional(readOnly=true)
public ArrayList<Mahasiswa> selectAll() {
try {
return (ArrayList<Mahasiswa>) getHibernateTemplate().loadAll(Mahasiswa.class);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
@Transactional(readOnly=false, propagation=Propagation.REQUIRES_NEW)
public void updateMahasiswa(Mahasiswa mahasiswa) {
try {
getHibernateTemplate().update(mahasiswa);
} catch (Exception e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
@Override
@Transactional(readOnly=true)
public Mahasiswa getMahasiswa(final String mahasiswa) {
try {
Object obj = getHibernateTemplate().execute(new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
return session.createQuery("from Mahasiswa where nim = :nim").setParameter("nim", mahasiswa).uniqueResult();
}
});
if(obj == null){
throw new Exception("Gagal Menghapus data mahasiswa");
}else{
return (Mahasiswa) obj;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}Untuk sementara, mungkin anda bisa mengacuhkan isi dari method-method diatas, karena isi dari method diatas nantinya akan dijelaskan lebih jauh di artikel selanjutnya, yang perlu diperhatikan adalah anotasi-anotasi nya, acuhkan @SupressWarning dan @Override karena itu tidak berpengaruh apa-apa terhadap program, @SupressWarning disitu untuk menghilangkan warning dari kode program, sedangkan @Override hanya untuk menandakan bahwa method tersebut meng-override dari class HibernateDaoSupport.
Perhatikan @Transactional, anotasi ini akan menentukan apakah method tersebut bisa melakukan proses baca atau tulis ke database, jika value readOnly disitu bernilai true, maka method tersebut hanya bisa melakukan proses baca/read/select dari database, tapi tidak bisa melakukan manipulasi terhadap database, dan begitu pula sebaliknya, lalu value Propagation.REQUIRES_NEW berarti setiap program memanggil method tersebut, Spring akan otomatis membuat transaksi baru, ada beberapa value dari Propagation yang menurut saya cukup penting di mengerti, silahkan lihat dokumentasi spring jika ingin tahu lebih jauh.
Oke sepertinya untuk bagian pertama cukup sampai disini dulu, kritik dan saran sangat diharapkan. Semoga saya dan pembaca mendapatkan manfaat dari artikel ini. Next, kita akan membuat konfigurasi untuk Spring dan Hibernate itu sendiri, see you on the next tutorial,thank you..
Regards





2 comments
2 pings
Fanani
08/04/2010 at 10:58 (UTC 7)
Thank mas , NEWBIE MODE nieh , . . asyik tutornya, terusin sampai part 100 ye .. :D
[Reply]
Kus Andriadi Reply:
April 8th, 2010 at 19:05
udah sampe part 3 aja kak fanani :D
[Reply]
KusAndriadi.com » Blog Archive » [Java] Integrasi Spring + Hibernate Framework (Part 2)
16/03/2010 at 22:41 (UTC 7)
[...] caranya mengintegrasikan Spring dan Hibernate. Jika kamu belum membaca artikel sebelumnya, silahkan baca terlebih dahulu. Dalam artikel kali ini kita akan membuat konfigurasi hibernate dan spring, lalu dengan [...]
KusAndriadi.com » Blog Archive » [Java] Integrasi Spring + Hibernate Framework (Part 3)
19/03/2010 at 00:21 (UTC 7)
[...] [Java] Integrasi Spring + Hibernate Framework (Part 1) [...]