Pengenalan Data Access Object {3} Implementasi dalam JPA


pada artikel sebelumnya saya telah membahas tentang pengenalan dao dan juga contoh implementasi dao dalam jdbc. sekarang pada artikel ini saya akan bahas tentang implementasi konsep dao pada java persistence api.

jika anda belum mengerti tentang jpa, ada baiknya anda cari info dulu tentang jpa atau belajar jpa terlebih dahulu. saya tidak akan membahas tentang jpa pada artikel ini, yang saya bahas hanya implementasi data access object dalam java peristence api, sehingga saya anggap anda mengerti jpa jika membaca artikel ini

pada artikel ini saya akan menggunakan kasus sebelumnya pada implementasi jdbc, yaitu membaut sistem informasi universitas, dimana contohnya hanya membuat dao untuk entitas fakultas. dan seperti pada artikel sebelumnya, untuk memulainya kita awali dengan membuat kelas entitas

package echo.khannedy.daopersistence.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 = 5;
        hash = 97 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }
}

setelah itu karena kita menggunakan jpa, jadi kita buat dulu konfigurasi jpa pada file persistence.xml, misal saya menggunakan TopLink, sehingga konfigurasinya seperti dibawah ini :



    
        oracle.toplink.essentials.PersistenceProvider
        echo.khannedy.daopersistence.entity.Fakultas
        
            
            
            
            
            
        
    

setelah selesai membuat konfigurasi persistence, saatnya kita membuat interface untuk FakultasDao :

package echo.khannedy.daopersistence.dao;

import echo.khannedy.daopersistence.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 itu buat kelas dao implementasi menggunakan java persistence api :

package echo.khannedy.daopersistence.impl;

import echo.khannedy.daopersistence.dao.FakultasDao;
import echo.khannedy.daopersistence.entity.Fakultas;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceException;

public class FakultasDaoImpl implements FakultasDao {

    private EntityManagerFactory factory;

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

    public void insert(Fakultas fakultas) {
        EntityManager manager = factory.createEntityManager();
        try {
            manager.getTransaction().begin();
            manager.persist(fakultas);
            manager.getTransaction().commit();
        } catch (PersistenceException exception) {
            manager.getTransaction().rollback();
            throw exception;
        } finally {
            manager.close();
        }

    }

    public void update(Fakultas fakultas) {
        EntityManager manager = factory.createEntityManager();
        try {
            manager.getTransaction().begin();
            manager.merge(fakultas);
            manager.getTransaction().commit();
        } catch (PersistenceException exception) {
            manager.getTransaction().rollback();
            throw exception;
        } finally {
            manager.close();
        }
    }

    public void delete(Fakultas fakultas) {
        EntityManager manager = factory.createEntityManager();
        try {
            manager.getTransaction().begin();
            fakultas = manager.find(Fakultas.class, fakultas.getId());
            manager.remove(fakultas);
            manager.getTransaction().commit();
        } catch (PersistenceException exception) {
            manager.getTransaction().rollback();
            throw exception;
        } finally {
            manager.close();
        }
    }

    public Fakultas getById(Long id) {
        EntityManager manager = factory.createEntityManager();
        try {
            manager.getTransaction().begin();
            Fakultas fakultas = manager.find(Fakultas.class, id);
            manager.getTransaction().commit();
            return fakultas;
        } catch (PersistenceException exception) {
            manager.getTransaction().rollback();
            throw exception;
        } finally {
            manager.close();
        }
    }

    public List getAll() {
        EntityManager manager = factory.createEntityManager();
        try {
            manager.getTransaction().begin();
            List list = manager.createQuery("select a from Fakultas a").getResultList();
            manager.getTransaction().commit();
            return list;
        } catch (PersistenceException exception) {
            manager.getTransaction().rollback();
            throw exception;
        } finally {
            manager.close();
        }
    }
}

setelah selesai membuat implementasi interface DAO, saatnya kita buat DAOFactory, dimana kali ini saya membuat kelas tersebut dengan nama PersistenceUtil :

package echo.khannedy.daopersistence.util;

import echo.khannedy.daopersistence.dao.FakultasDao;
import echo.khannedy.daopersistence.impl.FakultasDaoImpl;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public final class PersistenceUtil {

    private static final EntityManagerFactory factory;
    private static final FakultasDao fakultasDao;

    static {
        factory = Persistence.createEntityManagerFactory("persistence");
        fakultasDao = new FakultasDaoImpl(factory);
    }

    public static EntityManagerFactory getFactory() {
        return PersistenceUtil.factory;
    }

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

sekarang telah selesai, tinggal kita buat contoh penggunakan DAO tersebut, contohnya seperti terlihat pada sourcecode dibawah ini :

package echo.khannedy.daopersistence;

import echo.khannedy.daopersistence.dao.FakultasDao;
import echo.khannedy.daopersistence.entity.Fakultas;
import echo.khannedy.daopersistence.util.PersistenceUtil;

public class Main {

    public static void main(String[] args) {

        // membuat dao
        FakultasDao dao = PersistenceUtil.getFakultasDao();

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

        // menyimpan fakultas
        dao.insert(fakultas);

        // load data fakultas
        fakultas = dao.getById(fakultas.getId());

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

        // menyimpan hasil pengubahan
        dao.update(fakultas);

        // menghapus fakultas
        dao.delete(fakultas);

    }
}

sekarang anda tahu bagaimana cara mengimplementasikan konsep dao tersebut pada java persistence api. dan pada artikel selanjutnya akan saya bahas tentang implementasi dao pada hibernate annotation 😀

Iklan

4 pemikiran pada “Pengenalan Data Access Object {3} Implementasi dalam JPA

  1. mau nanya ni mas,

    Saat Entity di insert/persist, apakah EntityManager secara automatis memberikan ID ke entitiy tersebut.

    soalnya, aku ngga ada lihat assign ID ke entity tersebut. tidak seperti JDBC DAO yang mas buat

    result = statement.getGeneratedKeys();
    if (result.next()) {
    fakultas.setId(result.getLong(1));
    }

  2. mas saya mau nanyak………….
    saya nyobak yang dia ats kok da errorx gini?
    Exception in thread “main” java.lang.ExceptionInInitializerError
    at coba_jpa.Main.main(Main.java:20)
    Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named persistence
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
    at coba_jpa.PersistenceUtil.(PersistenceUtil.java:21)
    … 1 more
    Java Result: 1
    kira-kira salah saya dimna?
    maklum mas mas beru belajar……………
    terima kasih bnyak ya atas ilmunya…………

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