• Tidak ada hasil yang ditemukan

Persistence Sederhana dengan NetBeans

N/A
N/A
Protected

Academic year: 2021

Membagikan "Persistence Sederhana dengan NetBeans"

Copied!
15
0
0

Teks penuh

(1)

Persistence Sederhana dengan NetBeans

Oleh : Eko Zulkaryanto

http://zulkaryanto.wordpress.com

Sumber : http://jasoet.wordpress.com/2008/11/10/persistence-sederhana-dengan-netbeans-2/

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 :

Kita hanya perlu paham pendekatan Object Oriented

Table dalam database akan di generate otomatis bedasarkan entity class yang kita buat. 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.

(2)

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 //Class org.jasoet.model.Kategori package org.jasoet.model; import java.beans.PropertyChangeSupport; import java.io.Serializable; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Transient; /** *

* @author Deny Prasetyo */

@Entity

public class Kategori implements Serializable {

@Transient

private PropertyChangeSupport changeSupport = new PropertyChangeSuppor t(this);

private static final long serialVersionUID = 1263464563453L; @Id

@GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;

@Column(name = "name", length = 100) private String name;

@Column(name = "decription", length = 200) private String description;

@OneToMany(mappedBy = "kategori") private List<Produk> listProduct;

public List<Produk> getListProduct() { return listProduct;

}

public void setListProduct(List<Produk> listProduct) { this.listProduct = listProduct;

}

(3)

public String getDescription() { return description;

}

public void setDescription(String description) { String oldValue = this.description;

this.description = description;

changeSupport.firePropertyChange("description", oldValue, this.des cription);

}

public String getName() { return name;

}

public void setName(String name) { String oldValue = this.name; this.name = name;

changeSupport.firePropertyChange("name", oldValue, this.name); }

public Long getId() { return id;

}

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

changeSupport.firePropertyChange("id", oldValue, this.id); }

@Override

public int hashCode() { int hash = 0;

hash += (id != null ? id.hashCode() : 0); return hash;

}

@Override

public boolean equals(Object object) { // TODO: Warning

this method won't work in the case the id fields are not set if (!(object instanceof Kategori)) {

return false; }

Kategori other = (Kategori) object;

if ((this.id == null &amp;&amp; other.id != null) || (this.id != n ull &amp;&amp; !this.id.equals(other.id))) {

return false; }

return true; }

@Override

public String toString() {

return "org.jasoet.model.Kategori[id=" + id + "]"; }

(4)

Kelas org.jasoet.model.Produk //Class org.jasoet.model.Produk package org.jasoet.model; import java.beans.PropertyChangeSupport; 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.ManyToOne; import javax.persistence.Transient; /** *

* @author Deny Prasetyo */

@Entity

public class Produk implements Serializable {

@Transient

private PropertyChangeSupport changeSupport = new PropertyChangeSupport(th is);

private static final long serialVersionUID = 134674453247658L; @Id

@GeneratedValue(strategy = GenerationType.AUTO) private Long id;

@Column(name = "name", length = 100) private String name;

@Column(name = "decription", length = 200) private String description;

@Column(name = "price", length = 15) private double price;

@ManyToOne

private Kategori kategori;

public Long getId() { return id;

}

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

changeSupport.firePropertyChange("id", oldValue, this.id); }

public String getDescription() { return description;

}

public void setDescription(String description) { String oldValue = this.description;

this.description = description;

changeSupport.firePropertyChange("name", oldValue, this.description); }

(5)

public String getName() { return name;

}

public void setName(String name) { String oldValue = this.name;

this.name = name;

changeSupport.firePropertyChange("name",oldValue,this.name); }

public double getPrice() { return price;

}

public void setPrice(double price) { double oldValue = this.price;

this.price = price;

changeSupport.firePropertyChange("price", oldValue, this.price); }

public Kategori getKategori() { return kategori;

}

public void setKategori(Kategori kategori) { Kategori oldValue = this.kategori;

this.kategori = kategori;

changeSupport.firePropertyChange("kategori", oldValue, this.kategori); }

@Override

public int hashCode() { int hash = 0;

hash += (id != null ? id.hashCode() : 0); return hash;

}

@Override

public boolean equals(Object object) { // TODO: Warning

this method won't work in the case the id fields are not set if (!(object instanceof Produk)) {

return false; }

Produk other = (Produk) object;

if ((this.id == null &amp;&amp; other.id != null) || (this.id != null &amp ;&amp; !this.id.equals(other.id))) { return false; } return true; } @Override

public String toString() {

return "org.jasoet.model.Produk[id=" + id + "]"; }

(6)

}

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 //Class org.jasoet.dao.KetegoriDAO package org.jasoet.dao; import java.util.List; import javax.persistence.EntityManager; import org.jasoet.model.Kategori; /** *

* @author Deny Prasetyo */

public class KategoriDAO {

private EntityManager em;

public KategoriDAO(EntityManager em) { this.em = em;

}

public void save(Kategori prod) { if (prod.getId() == null) { em.persist(prod); } else { em.merge(prod); } }

public void delete(Kategori prod) { em.remove(prod);

}

public Kategori getKategori(Long id) { return em.find(Kategori.class, id); }

public List getProdudct() {

return em.createQuery("select p from Kategori p").getResultList();

} }

Kemudian untuk Kelas org.jasoet.dao.ProductDAO

//Class org.jasoet.dao.ProductDAO package org.jasoet.dao;

import java.util.List;

(7)

import org.jasoet.model.Produk;

/** *

* @author Deny Prasetyo */

public class ProdukDAO {

private EntityManager em;

public ProdukDAO(EntityManager em) { this.em = em;

}

public void save(Produk prod) { if (prod.getId() == null) { em.persist(prod); } else { em.merge(prod); } }

public void delete(Produk prod) { em.remove(prod);

}

public Produk getProduk(Long id) { return em.find(Produk.class, id); }

public List getProdudct() {

return em.createQuery("select p from Produk p").getResultList(); }

}

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

Kelas org.jasoet.TestMain //Class org.jasoet.TestMain package org.jasoet; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.jasoet.dao.KategoriDAO; import org.jasoet.dao.ProdukDAO; import org.jasoet.model.Kategori; import org.jasoet.model.Produk; /** *

* @author Deny Prasetyo */

public class TestMain {

private EntityManagerFactory emf = Persistence.createEntityManagerFact ory("TestInventoryPU");

(8)

public void doTest() {

EntityManager em = emf.createEntityManager(); KategoriDAO kdao = new KategoriDAO(em);

Kategori kat = new Kategori(); kat.setName("Sepatu");

kat.setDescription("Segala Jenis Sepatu dan Sepatu sandal");

ProdukDAO pdao = new ProdukDAO(em); Produk p = new Produk();

p.setKategori(kat); p.setName("Kazoot"); p.setPrice(40000); p.setDescription("Sepatu bermerek"); em.getTransaction().begin(); kdao.save(kat); pdao.save(p); em.getTransaction().commit(); }

public void doTestDua(){

EntityManager em = emf.createEntityManager(); ProdukDAO pdao = new ProdukDAO(em);

Produk p = pdao.getProduk(1l); System.out.println(p.getName()); System.out.println(p.getKategori().getName()); System.out.println(p.getPrice()); } /**

* @param args the command line arguments */

public static void main(String[] args) { TestMain tm = new TestMain();

tm.doTest(); tm.doTestDua();

} }

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.

(9)

Inheritance Pada Java Persistence Api (JPA)

Oleh : Eko Zulkaryanto

Sumber : http://jasoet.wordpress.com/2008/11/12/inheritance-pada-java-persistence-api-jpa/

Pada postingan sebelumnya kita telah sedikit mencoba Java Persistence Api menggunakan NetBeans. Disinggung sedikit bahwa dengan JPA kita bisa buat aplikasi menggunakan database tapi tidak perlu berurusan dengan struktur table ataupun SQL. Table dalam database akan di generate oleh JPA berdasarkan Entity class yang kita definisikan.

Sekarang kalau ada yang bertanya. “Kalau Table dalam database digenerate berdasarkan Entity class yang berkonsep OOP. Nah gimana ceritanya kalau Entity Class tersebut menggunakan konsep Inheritance ?”. Lebih baik kita lihat contoh program dibawah ini moga-moga bisa menjawab pertanyaan tersebut oh iya posting ini berdasarkan postingan salah satu blog yang muncul di web wordpress ini.

Buat sebuah project baru dengan nama “InheritanceJPA”. 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.

Setelah membuat database dan database tersebut telah terkoneksi dengan NetBeans selanjutnya buat sebuah Persistence Unit dan koneksikan Persistence Unit tersebut dengan database yang telah dibuat.Bisa lihat postingan sebelumnya untuk langkah-langkah diatas.

Sekarang baru kita coba untuk membuat Entity Class. Entity Class yang akan kita buat ada empat yaitu ModelBase, Article, BookArticle dan MagazineArticle dan kalau kita lihat Class diagramnya akan terlihat seperti ini.

(10)

Bisa dilihat Class Article turunan dari Class ModelBase sedangkan Class MagazieArticle dan BookArticle turunan dari Class Article. Sekarang coba kita lihat code dari ke empat Class tersebut.

Class ModelBase package org.jasoet.model; import java.io.Serializable; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; /** *

* @author Deny Prasetyo */

@MappedSuperclass

public abstract class ModelBase implements Serializable {

@Id

@GeneratedValue(strategy=GenerationType.AUTO) private Long id;

public Long getId() { return id;

}

public void setId(Long id) { this.id = id; } } Class Article package org.jasoet.model;

(11)

import javax.persistence.DiscriminatorColumn; import javax.persistence.DiscriminatorType; import javax.persistence.Entity; import javax.persistence.Inheritance; import javax.persistence.InheritanceType; /** *

* @author Deny Prasetyo */

@Entity

@Inheritance(strategy=InheritanceType.JOINED)

@DiscriminatorColumn(discriminatorType=DiscriminatorType.INTEGER, name="ar ticleTypeId")

public abstract class Article extends ModelBase {

private String articleId; private String title; private String summary; private String url;

public String getArticleId() { return articleId;

}

public void setArticleId(String articleId) { this.articleId = articleId;

}

public String getTitle() { return title;

}

public void setTitle(String title) { this.title = title;

}

public String getSummary() { return summary;

}

public void setSummary(String summary) { this.summary = summary;

}

public String getUrl() { return url;

}

public void setUrl(String url) { this.url = url; } } Class MagazineArticle package org.jasoet.model; import java.util.Date;

(12)

import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.Temporal; import javax.persistence.TemporalType; /** *

* @author Deny Prasetyo */

@Entity

@DiscriminatorValue("1")

public class MagazineArticle extends Article {

private static final long serialVersionUID = 4276734517833727032L;

private String publicationName;

@Temporal(TemporalType.DATE) private Date publicationDate;

public String getPublicationName() { return publicationName;

}

public void setPublicationName(String publicationName) { this.publicationName = publicationName;

}

public Date getPublicationDate() { return publicationDate;

}

public void setPublicationDate(Date publicationDate) { this.publicationDate = publicationDate;

}

public String getAuthorName() { return authorName;

}

public void setAuthorName(String authorName) { this.authorName = authorName; } } Class BookArticle package org.jasoet.model; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; /** *

* @author Deny Prasetyo */

@Entity

@DiscriminatorValue("2")

(13)

private static final long serialVersionUID = -6145145462382485655L; private String authorName;

private String publisherName; private String isbnNumber;

public String getAuthorName() { return authorName;

}

public void setAuthorName(String authorName) { this.authorName = authorName;

}

public String getPublisherName() { return publisherName;

}

public void setPublisherName(String publisherName) { this.publisherName = publisherName;

}

public String getIsbnNumber() {

}

public void setIsbnNumber(String isbnNumber) { this.isbnNumber = isbnNumber;

} }

1. Oh ya jangan lupa masukkan ke empat Class tadi kedalam packet org.jasoet.model atau nama yang dianda sukai. Biasakan menamai package dengan nama yang mencerminkan sifat Class-Class yang ada didalamnya.

2. Kemudian daftarkan Class-Class tersebut ke dalam Persistence Unit. Buka file persistence.xml kemudian pilih bagian Design dan pilih tombol “Add Class” kemudian tambahkan semua Class yang sudah dibuat sebelumnya.

Setelah itu buat sebuah Main Class untuk mencoba apakah program kita sudah benar. Class MainClass package org.jasoet; import java.util.Calendar; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence;

(14)

import javax.persistence.Query; import org.jasoet.model.Article; import org.jasoet.model.BookArticle; import org.jasoet.model.MagazineArticle; /** *

* @author Deny Prasetyo */

public class MainClass {

private EntityManager entityManager;

private EntityManagerFactory entityManagerFactory; public MainClass() { entityManagerFactory = Persistence.createEntityManagerFactory("Inheritance JPAPU"); entityManager = entityManagerFactory.createEntityManager(); }

public void doTest() {

// build and persist a magazine article MagazineArticle ma = new MagazineArticle(); ma.setArticleId("mag-000-001");

ma.setTitle("Magazine Article Title 1");

ma.setSummary("This is a short summary of magazine article 0001..."); ma.setUrl("/path/to/mag-art-0001");

Calendar pubDateCalendar = Calendar.getInstance(); pubDateCalendar.set(2002, 11, 15); ma.setPublicationDate(pubDateCalendar.getTime()); ma.setPublicationName("Harper Collins"); ma.setAuthorName("Dr Doolittle"); entityManager.getTransaction().begin(); entityManager.persist(ma); entityManager.getTransaction().commit();

// build and persist a book article BookArticle ba = new BookArticle(); ba.setArticleId("bk-000-001");

ba.setTitle("Book Article Title 1");

ba.setSummary("This is a short summary of book article 0001..."); ba.setUrl("/path/to/book-art-0001"); ba.setAuthorName("Dr Busybody"); ba.setPublisherName("Tom Collins"); ba.setIsbnNumber("1234-5678"); entityManager.getTransaction().begin(); entityManager.persist(ba); entityManager.getTransaction().commit();

// select all articles

Query q = entityManager.createQuery("select a from Article a"); List results = q.getResultList();

for (Article result : results) {

System.out.println(result.toString()); }

(15)

}

public static void main(String[] args) { MainClass mc = new MainClass();

mc.doTest(); }

}

Jika sudah kemudian jalankan program.

Sekarang perhatikan struktur table yang telah dibuat pada database. Ternyata struktur database untuk Entity Class dengan Inheritance menggunakan relasional OnetoOne. Seperti pada gambar dibawah :

Kesimpulan ternyata konsep Inheritance di OOP dapat diterapkan juga di Relational Database dan juga apabila kita menggunakan JPA kita diberi kemudahan karena tidak perlu mendesain table secara manual dan kita hanya perlu paham terhadap konsep OOP.

Gambar

Table dalam database akan di generate otomatis bedasarkan entity class yang kita buat

Referensi

Dokumen terkait

Dari gambar 4.13 dijelaskan bahwa torsi terbesar pada saat mesin generator menggunakan bahan bakar Premium terjadi pada saat mesin dengan dibebani 800 Watt, karena torsi

Konflik adalah suatu proses sosial dimana orang perorangan atau kelompok manusia berusaha untuk memenuhi tujuannya dengan jalan menentang pihak lawan yang disertai dengan ancaman

 Jika data menyebar jauh dari garis diagonal, maka model regresi tidak. memenuhi

Komunikasi publik dan pemasaran sosial dapat bertemu pada dua hal. Jadi, keduanya merupakan upaya komunikasi publik untuk menyuarakan kebutuhan masyarakat dan sifatnya

A statútum tehát nem-esszencialista módon magyarázza „a” cigányok „krimina- litását” (ami, könnyen meglehet, csak egy roma csoport akkor feltűnést keltő

Untuk melihat apakah nilai dari satu variabel tersebut berada dalam lingkungan yang sama atau jauh menyimpang dari kelompoknya (Upper or Under estimate), maka untuk pendeteksian

Penyedia setiap saat harus memelihara dan memperbaiki jika terjadi kerusakan&#34;kerusakan yang diakibatkan pengoperasian jembatan tersebut' hingga terpenuhinya

Atas rahmat Allah SWT, akhirnya penulis bisa menyelesaikan skripsi yang berjudul “ Strategi Promosi dalam Meningkatkan Jumlah Kunjungan pada UPTD Graha Teknologi