Persistence Sederhana dengan NetBeans

Tutorial ini mengambil ide dari tutorial yang ada di blognya Mas Hendro. Yaitu tentang pengenalan Swing Framework dan Beans Binding.

Persistence di Java masuk dalam Java Persistence Api atau JPA. JPA mempunyai kemampuan yang cukup “Mantap” yaitu kita benar-benar tidak berurusan dengan database. “Lho Tablenya gimana ?”. Nah tablenya akan dibuatkan sendiri oleh JPA.

Beberapa hal yang perlu diperhatikan :

  1. Kita hanya perlu paham pendekatan Object Oriented
  2. Table dalam database akan di generate otomatis bedasarkan entity class yang kita buat.
  3. Ada beberapa library JPA yang bisa digunakan antara lain TopLink dan Hibernate.

Untuk memulainya silahkan buka NetBeans (dalam tutorial ini saya menggunakan NetBeans 6.5 RC 2). Kemudian buat sebuah project baru dan beri nama “TestInventory”. Tipe project yang digunakan adalah Java Aplication. Pastikan untuk meng-uncheck option “Create Main Class”.

Buat sebuah database baru pada MySQL atau JavaDB dan pastikan NetBeans sudah terhubung dengan database tersebut.

Buat sebuah sebuah Persistence Unit pada project yang baru saja dibuat. Persistence Unit dapat di temukan pada New File -> Categori Persistence. Kemudian pastikan koneksi database yang terpilih sesuai dengan database yang tadi kita buat. Untuk library silahkan pilih yang diinginkan tetapi pada tutorial ini saya menggunakan Hibernate.

Kemudian buat dua buah Entity Class yaitu Kategori dan Produk kemudian masukkan dalam Package org.jasoet.model atau sesuai dengan keiinginan. File tipe Entity Class dapat ditemukan pada New File -> Categori Persistence.

Kemudian sesuaikan dengan source code dibawah ini.

Kelas org.jasoet.model.Kategori

<br />//Class org.jasoet.model.Kategori<br />package org.jasoet.model;<br /><br />import java.beans.PropertyChangeSupport;<br />import java.io.Serializable;<br />import java.util.List;<br />import javax.persistence.Column;<br />import javax.persistence.Entity;<br />import javax.persistence.GeneratedValue;<br />import javax.persistence.GenerationType;<br />import javax.persistence.Id;<br />import javax.persistence.OneToMany;<br />import javax.persistence.Transient;<br /><br />/**<br /> *<br /> * @author Deny Prasetyo<br /> */<br />@Entity<br />public class Kategori implements Serializable {<br /><br />    @Transient<br />    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);<br />    private static final long serialVersionUID = 1263464563453L;<br />    @Id<br />    @GeneratedValue(strategy = GenerationType.IDENTITY)<br />    private Long id;<br />    @Column(name = "name", length = 100)<br />    private String name;<br />    @Column(name = "decription", length = 200)<br />    private String description;<br />    @OneToMany(mappedBy = "kategori")<br />    private List<produk> listProduct;<br /><br />    public List<produk> getListProduct() {<br />        return listProduct;<br />    }<br /><br />    public void setListProduct(List<produk> listProduct) {<br />        this.listProduct = listProduct;<br />    }<br /><br />    public String getDescription() {<br />        return description;<br />    }<br /><br />    public void setDescription(String description) {<br />        String oldValue = this.description;<br />        this.description = description;<br />        changeSupport.firePropertyChange("description", oldValue, this.description);<br />    }<br /><br />    public String getName() {<br />        return name;<br />    }<br /><br />    public void setName(String name) {<br />        String oldValue = this.name;<br />        this.name = name;<br />        changeSupport.firePropertyChange("name", oldValue, this.name);<br />    }<br /><br />    public Long getId() {<br />        return id;<br />    }<br /><br />    public void setId(Long id) {<br />        Long oldValue = this.id;<br />        this.id = id;<br />        changeSupport.firePropertyChange("id", oldValue, this.id);<br />    }<br /><br />    @Override<br />    public int hashCode() {<br />        int hash = 0;<br />        hash += (id != null ? id.hashCode() : 0);<br />        return hash;<br />    }<br /><br />    @Override<br />    public boolean equals(Object object) {<br />        // TODO: Warning - this method won't work in the case the id fields are not set<br />        if (!(object instanceof Kategori)) {<br />            return false;<br />        }<br />        Kategori other = (Kategori) object;<br />        if ((this.id == null &amp;&amp; other.id != null) || (this.id != null &amp;&amp; !this.id.equals(other.id))) {<br />            return false;<br />        }<br />        return true;<br />    }<br /><br />    @Override<br />    public String toString() {<br />        return "org.jasoet.model.Kategori[id=" + id + "]";<br />    }<br />}<br />

Kelas org.jasoet.model.Produk

<br />//Class org.jasoet.model.Produk<br />package org.jasoet.model;<br /><br />import java.beans.PropertyChangeSupport;<br />import java.io.Serializable;<br />import javax.persistence.Column;<br />import javax.persistence.Entity;<br />import javax.persistence.GeneratedValue;<br />import javax.persistence.GenerationType;<br />import javax.persistence.Id;<br />import javax.persistence.ManyToOne;<br />import javax.persistence.Transient;<br /><br />/**<br /> *<br /> * @author Deny Prasetyo<br /> */<br />@Entity<br />public class Produk implements Serializable {<br /><br />    @Transient<br />    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);<br />    private static final long serialVersionUID = 134674453247658L;<br />    @Id<br />    @GeneratedValue(strategy = GenerationType.AUTO)<br />    private Long id;<br />    @Column(name = "name", length = 100)<br />    private String name;<br />    @Column(name = "decription", length = 200)<br />    private String description;<br />    @Column(name = "price", length = 15)<br />    private double price;<br /><br />    @ManyToOne<br />    private Kategori kategori;<br /><br />    public Long getId() {<br />        return id;<br />    }<br /><br />    public void setId(Long id) {<br />        Long oldValue = this.id;<br />        this.id = id;<br />        changeSupport.firePropertyChange("id", oldValue, this.id);<br />    }<br /><br />    public String getDescription() {<br />        return description;<br />    }<br /><br />    public void setDescription(String description) {<br />        String oldValue = this.description;<br />        this.description = description;<br />        changeSupport.firePropertyChange("name", oldValue, this.description);<br />    }<br /><br />    public String getName() {<br />        return name;<br />    }<br /><br />    public void setName(String name) {<br />        String oldValue = this.name;<br />        this.name = name;<br />        changeSupport.firePropertyChange("name",oldValue,this.name);<br />    }<br /><br />    public double getPrice() {<br />        return price;<br />    }<br /><br />    public void setPrice(double price) {<br />        double oldValue = this.price;<br />        this.price = price;<br />        changeSupport.firePropertyChange("price", oldValue, this.price);<br />    }<br /><br />    public Kategori getKategori() {<br />        return kategori;<br />    }<br /><br />    public void setKategori(Kategori kategori) {<br />        Kategori oldValue = this.kategori;<br />        this.kategori = kategori;<br />        changeSupport.firePropertyChange("kategori", oldValue, this.kategori);<br />    }<br /><br />    @Override<br />    public int hashCode() {<br />        int hash = 0;<br />        hash += (id != null ? id.hashCode() : 0);<br />        return hash;<br />    }<br /><br />    @Override<br />    public boolean equals(Object object) {<br />        // TODO: Warning - this method won't work in the case the id fields are not set<br />        if (!(object instanceof Produk)) {<br />            return false;<br />        }<br />        Produk other = (Produk) object;<br />        if ((this.id == null &amp;&amp; other.id != null) || (this.id != null &amp;&amp; !this.id.equals(other.id))) {<br />            return false;<br />        }<br />        return true;<br />    }<br /><br />    @Override<br />    public String toString() {<br />        return "org.jasoet.model.Produk[id=" + id + "]";<br />    }<br />}<br />

Perhatikan penggunaan anotasi (@blablabla) pada kode diatas anotasi tersebut nantinya akan digunakan untuk menggenerate tabel. Untuk lebih jelas mengenai @Anotasi pada Persistence API silahkan download buku  berjudul “Java Persistence with Hibernate” di link-link bagian tutorial pada blog ini.

Setelah membuat dua buah entity class kemudian buat dua buah kelas DAO yaitu KategoriDAO dan ProdukDAO. Kelas DAO merupakan Java Class biasa. Dua kelas tersebut nantinya akan digunakan untuk fungsi CRUD (Create, Read, Update, Delete) pada database. Masukkan dua buah kelas tersebut kedalam package org.jasoet.dao

Sesuaikan dengan Code dibawah ini.
Kelas org.jasoet.dao.KategoriDAO

<br />//Class org.jasoet.dao.KetegoriDAO<br />package org.jasoet.dao;<br /><br />import java.util.List;<br />import javax.persistence.EntityManager;<br />import org.jasoet.model.Kategori;<br /><br />/**<br /> *<br /> * @author Deny Prasetyo<br /> */<br />public class KategoriDAO {<br /><br />    private EntityManager em;<br /><br />    public KategoriDAO(EntityManager em) {<br />        this.em = em;<br />    }<br /><br />    public void save(Kategori prod) {<br />        if (prod.getId() == null) {<br />            em.persist(prod);<br />        } else {<br />            em.merge(prod);<br />        }<br />    }<br /><br />    public void delete(Kategori prod) {<br />        em.remove(prod);<br />    }<br /><br />    public Kategori getKategori(Long id) {<br />        return em.find(Kategori.class, id);<br />    }<br /><br />    public List getProdudct() {<br />        return em.createQuery("select p from Kategori p").getResultList();<br />    }<br />}<br />

Kemudian untuk Kelas org.jasoet.dao.ProductDAO

<br />//Class org.jasoet.dao.ProductDAO<br />package org.jasoet.dao;<br /><br />import java.util.List;<br />import javax.persistence.EntityManager;<br />import org.jasoet.model.Produk;<br /><br />/**<br /> *<br /> * @author Deny Prasetyo<br /> */<br />public class ProdukDAO {<br /><br />    private EntityManager em;<br /><br />    public ProdukDAO(EntityManager em) {<br />        this.em = em;<br />    }<br /><br />    public void save(Produk prod) {<br />        if (prod.getId() == null) {<br />            em.persist(prod);<br />        } else {<br />            em.merge(prod);<br />        }<br />    }<br /><br />    public void delete(Produk prod) {<br />        em.remove(prod);<br />    }<br /><br />    public Produk getProduk(Long id) {<br />        return em.find(Produk.class, id);<br />    }<br /><br />    public List getProdudct() {<br />        return em.createQuery("select p from Produk p").getResultList();<br />    }<br />}<br />

Setelah selesai sekarang kita tinggal membuat main class untuk mengetest apakah program kita telah berjalan dengan baik.

Kelas org.jasoet.TestMain

<br />//Class org.jasoet.TestMain<br />package org.jasoet;<br /><br />import javax.persistence.EntityManager;<br />import javax.persistence.EntityManagerFactory;<br />import javax.persistence.Persistence;<br />import org.jasoet.dao.KategoriDAO;<br />import org.jasoet.dao.ProdukDAO;<br />import org.jasoet.model.Kategori;<br />import org.jasoet.model.Produk;<br /><br />/**<br /> *<br /> * @author Deny Prasetyo<br /> */<br />public class TestMain {<br /><br />    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("TestInventoryPU");<br /><br />    public void doTest() {<br />        EntityManager em = emf.createEntityManager();<br />        KategoriDAO kdao = new KategoriDAO(em);<br />        Kategori kat = new Kategori();<br />        kat.setName("Sepatu");<br />        kat.setDescription("Segala Jenis Sepatu dan Sepatu sandal");<br /><br />        ProdukDAO pdao = new ProdukDAO(em);<br />        Produk p = new Produk();<br />        p.setKategori(kat);<br />        p.setName("Kazoot");<br />        p.setPrice(40000);<br />        p.setDescription("Sepatu bermerek");<br /><br />        em.getTransaction().begin();<br />        kdao.save(kat);<br />        pdao.save(p);<br />        em.getTransaction().commit();<br /><br />    }<br /><br />    public void doTestDua(){<br />        EntityManager em = emf.createEntityManager();<br />        ProdukDAO pdao = new ProdukDAO(em);<br /><br />        Produk p = pdao.getProduk(1l);<br />        System.out.println(p.getName());<br />        System.out.println(p.getKategori().getName());<br />        System.out.println(p.getPrice());<br />    }<br />    /**<br />     * @param args the command line arguments<br />     */<br />    public static void main(String[] args) {<br />        TestMain tm = new TestMain();<br />        tm.doTest();<br />        tm.doTestDua();<br /><br />    }<br />}<br /><br />

Kita akan membahas kode program pada MainClass diatas.

  1. Pada baris awal terdapat deklarasi EntityManagerFactory ini digunakan untuk menjalankan Persistence Library yang sudah di definisikan pada Persistence Unit (persistence.xml) sesuai dengan nama parameter yang dimasukkan dalam hal ini TestInventoryPU;
  2. Pada methode doTest() terdapat deklarasi EntityManager yang diambil dari Object EntityManagerFactory. Ketika EntityManager di deklarasikan maka table pada database akan digenerate.
  3. Kemudian pada doTest() dilakukan insert satu buah object Kategori dan satu buah object Produk. Perhatikan bagian em.getTransaction().begin() dan em.getTransaction().commit() Ini merupakan pembuka dan penutup Transaction pada database. Sedangkan untuk bagian kdao.save() dan pdao.save() merupakan pemanggilan fungsi untuk menyimpan data.
  4. Pada methode doTestDua() isi dari table pada database diambil kemudian ditampilkan.

Jalankan program kemudian amati output dan juga table pada database.

Segitu dulu posting untuk kali ini. Kalau ada pertanyaan hubungi jasoet87@gmail.com

    • star
    • November 18th, 2008

    tutorial yg sngt membantu…saya mo nanya neh mas..
    bisa ga JPA ini diintegrasi dengan Netbeans RCP?
    kalo bisa gmna caranya ya mas?
    tx for advance..

    • hendra
    • Maret 13th, 2009

    Mas Deny Prasetya … saya dah coba Codingnya dengan mengikuti langkah2 yang baik…
    Hanya saja muncul bahwah tuk Symbol changeSupport tidak dapat ditemukan ?? apa ada yang kurang tuk importnya? atau harus add library lagi?….

    terimakasih untuk penjelasanya

  1. tutorial nya sangat bagus, terima kasih…..

  2. Sing duwe Blog weh turu kok piye leh arep takon ,mundur teratur yuh…

  1. No trackbacks yet.

Tinggalkan komentar