Pengenalan Data Access Object {4} Implementasi dalam Hibernate


artikel sebelumnya saya bahas tentang implementasi dao dalam java persistence api, dan pada artikel sekarang ini saya akan bahas tentang implementasi dao pada hibernate annotation. kenapa hibernate annotation? kenapa tidak hibernate core saja?

alasa utama saya menggunakan hibernate annotation dibandingkan dengan hibernate core adalah karena menggunakan @annotation yang menurut saya lebih mudah dan lebih elegan dibandingkan kita harus membuat file XML untuk mapping kelas dan tabel

ok, kita langsung saja masuk ke inti masalah. dan masalahnya sama seperti masalah sebelum-sebelumnya yaitu membuat sistem informasi universitas, dan kalo ini menggunakan hibernate annotation. dan seperti biasa pula, saya hanya akan membahas tentang dao untuk entitas fakultas, sedangkan untuk entitas lainnya bisa anda buat sendiri 😀

sekarang tahap pertama adalah kita buat kelas Fakultas terlebih dahulu :

package echo.khannedy.daohibernate.entity;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "table_fakultas")
public class Fakultas implements Serializable {

    @Id
    @Column(name = "id_fakultas")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name = "nama_fakultas", nullable = false, length = 45)
    private String nama;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Fakultas other = (Fakultas) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 79 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }
}

setelah membuat kelas entitas, kita buat konfigurasi hibernate annotation menggunakan file hibernate.cfg.xml yang disimpan pada root package :




    
        org.hibernate.dialect.MySQLInnoDBDialect
        com.mysql.jdbc.Driver
        jdbc:mysql://localhost:3306/database
        username
        password
        create-drop
        
    

sekarang saatnya kita buat interface dao untuk kelas entity fakultas diatas :

package echo.khannedy.daohibernate.dao;

import echo.khannedy.daohibernate.entity.Fakultas;
import java.util.List;

public interface FakultasDao {

    void insert(Fakultas fakultas);

    void update(Fakultas fakultas);

    void delete(Fakultas fakultas);

    Fakultas getById(Long id);

    List getAll();
}

setelah membuat interface fakultas dao, saatnya kita buas kelas implementasi dari interface fakultas dao diatas :

package echo.khannedy.daohibernate.impl;

import echo.khannedy.daohibernate.dao.FakultasDao;
import echo.khannedy.daohibernate.entity.Fakultas;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

public class FakultasDaoImpl implements FakultasDao {

    private SessionFactory factory;

    public FakultasDaoImpl(SessionFactory factory) {
        this.factory = factory;
    }

    public void insert(Fakultas fakultas) {
        Session session = factory.openSession();
        try {
            session.beginTransaction();
            session.save(fakultas);
            session.getTransaction().commit();
        } catch (HibernateException exception) {
            session.getTransaction().rollback();
            throw exception;
        } finally {
            session.close();
        }
    }

    public void update(Fakultas fakultas) {
        Session session = factory.openSession();
        try {
            session.beginTransaction();
            session.update(fakultas);
            session.getTransaction().commit();
        } catch (HibernateException exception) {
            session.getTransaction().rollback();
            throw exception;
        } finally {
            session.close();
        }
    }

    public void delete(Fakultas fakultas) {
        Session session = factory.openSession();
        try {
            session.beginTransaction();
            session.delete(fakultas);
            session.getTransaction().commit();
        } catch (HibernateException exception) {
            session.getTransaction().rollback();
            throw exception;
        } finally {
            session.close();
        }
    }

    public Fakultas getById(Long id) {
        Session session = factory.openSession();
        try {
            session.beginTransaction();
            Fakultas fakultas = (Fakultas) session.get(Fakultas.class, id);
            session.getTransaction().commit();
            return fakultas;
        } catch (HibernateException exception) {
            session.getTransaction().rollback();
            throw exception;
        } finally {
            session.close();
        }
    }

    public List getAll() {
        Session session = factory.openSession();
        try {
            session.beginTransaction();
            List list = session.createCriteria(Fakultas.class).list();
            session.getTransaction().commit();
            return list;
        } catch (HibernateException exception) {
            session.getTransaction().rollback();
            throw exception;
        } finally {
            session.close();
        }
    }
}

sebenarnya hampir sama cara pembuatan dao di hibernate annotation dan java persistence api, yang membedakan adalah hibernate menggunakan Session dan SessionFactory sedangkan java persistence api menggunakan EntityManager dan EntityManagerFactory

sekarang kita buat kelas dao factory, dimana pada artikel ini saya ubah namanya menjadi HiberanteUtil :

package echo.khannedy.daohibernate.util;

import echo.khannedy.daohibernate.dao.FakultasDao;
import echo.khannedy.daohibernate.impl.FakultasDaoImpl;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

public class HibernateUtil {

    private static final SessionFactory sessionFactory;
    private static final FakultasDao fakultasDao;

    static {
        sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        fakultasDao = new FakultasDaoImpl(sessionFactory);
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static FakultasDao getFakultasDao() {
        return fakultasDao;
    }
}

selesai sudah implementasi dao pada hibernate, saatnya kita uji coba :

package echo.khannedy.daohibernate;

import echo.khannedy.daohibernate.dao.FakultasDao;
import echo.khannedy.daohibernate.entity.Fakultas;
import echo.khannedy.daohibernate.util.HibernateUtil;

public class Main {

    public static void main(String[] args) {
        // membuat dao
        FakultasDao dao = HibernateUtil.getFakultasDao();

        // membuat fakultas
        Fakultas fakultas = new Fakultas();
        fakultas.setNama("Teknik dan Ilmu Komputer");

        // menyimpan fakultas
        dao.insert(fakultas);

        // meload fakultas
        fakultas = dao.getById(fakultas.getId());

        // menubah nama fakultas
        fakultas.setNama("Sastra");

        // menyimpan hasil ke database
        dao.update(fakultas);

        // menghapus dari database
        dao.delete(fakultas);
    }
}

usai sudah tutorial implementasi dao, dimana saya bahas dalam jdbc, jpa dan hibernate. sebenarnya ada framework yang lebih tinggi dari jdbc namun lebih rendah dari hiberante dan jpa, framework itu adalah apache ibatis. ibatis merupakan framework yang bisa digunakan sebagai framework object relational mapping yang cukup bagus jika anda ingin merasakan kehebatan ORM dan juga native SQL

pada artikel selanjutnya saya akan bahas tentang kecerobohan dalam membuat DAO dan bagaimana solusinya 😀

Iklan

7 pemikiran pada “Pengenalan Data Access Object {4} Implementasi dalam Hibernate

  1. mantap sekali tutorialnya berguna banget,, btw ecooo bisa tolongin gue nggak, gue ada masalah ama query yang manggil 2 tabel atau lebih di hibernate, katanya ada error dengan agregat fungsi….gimana nihhh ecooo, kira2 bisa dibikinin tutorialnya nggak….thankk ya brooo

  2. gimana caranya menempatkan sessionFactory di filter, sehingga open session maupun transaction rollback di class tersebut, mungkin dengan Local Thread

  3. gimana klu inheritance ?
    misal ada kelas yaitu kelas Kendaraan, kelas Motor & kelas Yamaha, dimana Kelas Motor extends ke Kendaraan & Yamaha extends ke Motor.

    saya masih bingung, jika berkenan tolong share.. 🙂

  4. Mas eko saya juga punya pertanyaan mirip sama bro FUGU.

    Misal punya

    tabel : Course, Student, courses_take

    nah untuk mencari data student yang mengambil course berarti pasti pake inner join.

    kalo di hibernate nya sih ga masalah bisa pake SQLQuery, nah bagian DAO nya ini saya bingung.

    misal bikin function : public List getStudenttakeCourse(Student st){…}
    kan akan aneh dibagian returnnya yang hanya menampilkan list Course saja. ada cara ga biar bisa mereturn 2 penggabungan tabel mas. Tolong ya mas di bantu solusinya. Trims.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s