Beranda > Hibernate Framework, Java Programming, MySQL Database > Pengenalan Data Access Object {4} Implementasi dalam Hibernate

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 :D

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 :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/database</property>
        <property name="hibernate.connection.username">username</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.hbm2ddl.auto">create-drop</property>
        <mapping class="echo.khannedy.daohibernate.entity.Fakultas"/>
    </session-factory>
</hibernate-configuration>

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<Fakultas> 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<Fakultas> getAll() {
        Session session = factory.openSession();
        try {
            session.beginTransaction();
            List<Fakultas> 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 :D

  1. andry
    30 Agustus 2009 pukul 13:27 | #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. misteri
    3 Oktober 2009 pukul 22:28 | #2

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

  3. fugu
    4 Januari 2010 pukul 16:55 | #3

    bang Eko, gimana caranya mapping 2 table trus makenya di join

  4. alex
    16 Januari 2010 pukul 08:15 | #4

    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.. :)

    • alex
      16 Januari 2010 pukul 08:18 | #5

      masing-masing kelas nantinya akan di mapping ke table Kendaraan, Motor & Yamaha

  1. Belum ada trackback.