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.Fakultassetelah 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 😀
artikel selanjutnya akan saya bahas tentang implementasi data access object dalam Hibernate Annotation
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));
}
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…………
mantap mas echoo tutorialya …