Aplikasi Desktop Crud MVC java sederhana Menggunakan JPA(Java Persistence API)

Sebelumnya saya pernah membuat aplikasi Crud sederhana namun bedanya yang dulu saya masih menggunakan jdbc untuk koneksi nya dan yang sekarang menggunakan JPA (java persistence API). Dengan menggunakan jpa proses pembuatan doa jauh lebih cepat, namun dilain sisi jpa membutuhkan resource yang lebih besar. untuk aplikasi ini saja saya lihat di properstiesnya mencapai sekitar 6Mb, oleh karena itu yang saya upload tidak beserta librarynya,hanya sourcecodenya saja. jangan lupa nanti kalau mencoba di add library jdbc connector dan eclipseLink(JPA 2.0) dibawah ini gambar librarynya..

library

bedanya JPA dengan jdbc yaitu kalau kita menggunakan jdbc kita harus membuat satu persatu dulu table didalam databasenya dulu setelah itu kita buat class yang merepresentasikan table tersebut. sedangkan kalau kita menggukan JPA kita hanya membuat database saja, sedang kan table nanti akan dibuatkan oleh jpa, dengan mengambil table dari class entity yang kita buat. jadi buat class sekaligus membuat table. kerja satu kali menjadikan 2 hasil, table dan class entity.

langsung keprakteknya aja, pertama kita buat databasenya, bisa lewat console bisa juga lewat phpmyadmin ato tools2 kesukaan anda terserah..
disini saya memberi nama database saya dengan nama crudjpa

        > create database crudjpa;

setelah itu kita buat project kita.. pertama kita membuat entity class, ini beda dengan java class. dibawah ini contohnya..
entityclass
setelah itu isi nama class dengan Mahasiswa, untuk Premary key nya Long bisa String juga bisa, tergantung kebutuhan. disini saya menggukanan String karena NIM saya analogikan sebuah String.
entity

setelah itu atur coneksi kedatabase kita dengan memilih new connection..
newconn

disini silahkan atur nama nama database, username serta password di mysql anda. kalo di code yang saya upload user dan passwordnya root dan root.
newdatabaseconnektion

setelah selesai semua mari kta masuk ke koding
pertama kita isi dulu class Mahasiswa.java yang telah kita buat..

package crudjpa.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;

/**
 *
 * @author bahrie
 */
@Entity
public class Mahasiswa implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private String id;
    private String nama;
    private String alamat;

    public String getAlamat() {
        return alamat;
    }

    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }

    public String getNama() {
        return nama;
    }

    public void setNama(String nama) {
        this.nama = nama;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = 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 Mahasiswa)) {
            return false;
        }
        Mahasiswa other = (Mahasiswa) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "crudjpa.entity.Mahasiswa[id=" + id + "]";
    }
}

Lalu buat MahasiswaDao.java untuk daonya


package crudjpa.doa;

import crudjpa.entity.Mahasiswa;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.RollbackException;

/**
 *
 * @author bahrie
 */
public class MahasiswaDao {

    private EntityManager entityManager;

    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
    }

    public void save(Mahasiswa mhs) {
        try {
            if (mhs.getId() == null) {
                entityManager.persist(mhs);
            } else {
                entityManager.merge(mhs);
            }
        } catch (RollbackException ex) {
            entityManager.getTransaction().rollback();
        }
    }

    public void delete(Mahasiswa mhs) {
        entityManager.remove(mhs);
    }

    public Mahasiswa getMahasiswa(String id) {
        return entityManager.find(Mahasiswa.class, id);
    }

    public List getAllMahasiswa() {
        return entityManager.createQuery("select m from Mahasiswa m").getResultList();
    }
}

Lalu membuat ServiceMahasiswa.java untuk implementnnya.. walau disini kita tidak memakai interface namun saya menyebutnya sebagai implement karena nanti nya yang akan sering kita pakai adalah ServiceMahasiswa.

package crudjpa.service;

import crudjpa.doa.MahasiswaDao;
import crudjpa.entity.Mahasiswa;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.RollbackException;

/**
 *
 * @author bahrie
 */
public class ServiceMahasiswa {

    MahasiswaDao mahasiswaDao;
    EntityManager entityManager;

    public ServiceMahasiswa(EntityManager entityManager) {
        setEntityManager(entityManager);
    }

    public void setEntityManager(EntityManager entityManager) {
        this.entityManager = entityManager;
        mahasiswaDao = new MahasiswaDao();
        mahasiswaDao.setEntityManager(entityManager);
    }

    public void save(Mahasiswa mhs) {
        try {
            entityManager.getTransaction().begin();
            mahasiswaDao.save(mhs);
            entityManager.getTransaction().commit();
        } catch (RollbackException ex) {
            entityManager.getTransaction().rollback();
        }
    }

    public void delete(Mahasiswa mhs) {
        try {
            entityManager.getTransaction().begin();
            mahasiswaDao.delete(mhs);
            entityManager.getTransaction().commit();
        } catch (RollbackException ex) {
            entityManager.getTransaction().rollback();
        }
    }

    public Mahasiswa getMhs(String mhs) {
        return mahasiswaDao.getMahasiswa(mhs);
    }

    public List getAllMhs() {
        return mahasiswaDao.getAllMahasiswa();
    }
}

Setelah itu mari kita merancang formnya. contoh yg sudah jadi dan jalan seperti dibawah.
creensot

Setelah itu kita isi codenya sebelum masuk ke aksi tombol..

public class FormMhsJpa extends javax.swing.JFrame {

    private EntityManager entityManager;
    private ServiceMahasiswa serviceMahasiswa;
    List list = new ArrayList();

    /** Creates new form FormMhsJpa */
    public FormMhsJpa() {

        initComponents();

        entityManager = Persistence.createEntityManagerFactory("CrudJPAPU").createEntityManager();
        serviceMahasiswa = new ServiceMahasiswa(entityManager);
        list = serviceMahasiswa.getAllMhs();
        tableMahasiswa.getSelectionModel().addListSelectionListener(new ListSelectionListener() {

            public void valueChanged(ListSelectionEvent e) {
                int row = tableMahasiswa.getSelectedRow();
                if (row != -1) {
                    txtNim.setText(list.get(row).getId());
                    txtNama.setText(list.get(row).getNama());
                    txtAlamat.setText(list.get(row).getAlamat());
                }
            }
        });
        isiTable();
    }

    void kosongkanTeks() {
        txtNim.setText("");
        txtNama.setText("");
        txtAlamat.setText("");
    }

    void isiTable() {
        Object data[][] = new Object[list.size()][3];
        int x = 0;
        for (Mahasiswa mhs : list) {
            data[x][0] = mhs.getId();
            data[x][1] = mhs.getNama();
            data[x][2] = mhs.getAlamat();
            x++;
        }
        String judul[] = {"Nim", "Nama", "Alamat"};
        tableMahasiswa.setModel(new DefaultTableModel(data, judul));
        jScrollPane1.setViewportView(tableMahasiswa);
    }

    boolean cekTeks() {
        if (!txtNim.getText().isEmpty()
                && !txtNama.getText().isEmpty()
                && !txtAlamat.getText().isEmpty()) {
            return true;
        } else {
            return false;
        }
    }

Dan untuk tombol tombol aksi nya….

private void btnTambahActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        if (cekTeks()) {
            Mahasiswa mhs = new Mahasiswa();
            mhs.setId(txtNim.getText());
            mhs.setNama(txtNama.getText());
            mhs.setAlamat(txtAlamat.getText());
            serviceMahasiswa.save(mhs);
        } else {
            JOptionPane.showMessageDialog(this, "data harus diisi semua");
            kosongkanTeks();
        }
        list = serviceMahasiswa.getAllMhs();
        isiTable();
        kosongkanTeks();
    }

    private void btnUbahActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        if (cekTeks()) {
            Mahasiswa mhs = new Mahasiswa();
            mhs.setId(txtNim.getText());
            mhs.setNama(txtNama.getText());
            mhs.setAlamat(txtAlamat.getText());
            serviceMahasiswa.save(mhs);
        } else {
            JOptionPane.showMessageDialog(this, "data harus diisi semua");
            kosongkanTeks();
        }
        serviceMahasiswa.getAllMhs();
        isiTable();
        kosongkanTeks();
    }

    private void btHapusActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        int row = tableMahasiswa.getSelectedRow();
        if (row != -1) {
            if (JOptionPane.showConfirmDialog(this, "apakah anda yakin untuk menghapus data", "Konfirmasi", JOptionPane.YES_NO_OPTION) == JOptionPane.CANCEL_OPTION) {
                return;
            }
            serviceMahasiswa.delete(list.get(row));
            list = serviceMahasiswa.getAllMhs();
            isiTable();
            kosongkanTeks();
        }
    }

Alhamdulillah selesai juga.. πŸ™‚

Sourcecode dapat di download pada link di bawah ini.

http://bahrie127.googlecode.com/files/CrudJPA.zip

8 Komentar (+add yours?)

  1. Trackback: Sourcecode Maupun Tutorial yang dapat di Download « Coretan Seorang Hamba
  2. mulkan
    Jul 15, 2011 @ 22:34:35

    pusing..he… hee… aku malah pakai persist ajalah.. haa

    Balas

  3. markzurkberg
    Agu 12, 2011 @ 05:39:20

    oop-nya kurang bagus mas.
    ServiceMahasiswa-nya harus implements dari MahasiswaDao mas, karena kalo gak gitu kita bisa seenaknya saja kita bikin method.
    kan tujuan dari interface biar kelas2 yg mengimplemen manut dengan apa2 yg ada di yg diimplemen.

    Balas

    • bahrie-___-
      Agu 12, 2011 @ 12:54:57

      hahahaaa.. bner2.. mungkin salah ambil class aja..hehehee itu juga pas pertama lagihan pake jpa.. biar ga lupa di posting aja.. yg lain biasanya sih implement dari class interface.. jooss maksih coreksinya.. πŸ™‚

      Balas

  4. Lintang
    Mar 15, 2012 @ 08:00:13

    MAs Bahrie.. bolehkah saya meminta contoh program JPA namun yg lebih kompleks dari ini.? komponen yg di gunakan tidak hanya Jtextfield namun juga JComboBox dsb.. saya palling bingung penerapan JPA saat pembuatan komponen combo box dimana item yang ada di combo box di ambil dari data dalam database. cara koneksi dalam JPA sudah berbeda dari JDBC tentu saja pembuatan JComboBox yg mengambil data dari database ini juga sedikit berbeda? mohon pencerahanya terima kasih…

    Balas

    • bahrie
      Mar 19, 2012 @ 11:13:16

      tinggal di kembangin mas, πŸ˜€ coba di bikin kalo ada masalah dapat tanya2, bisa chat saya di gtalk : bahrie172 πŸ˜€

      Balas

  5. Raka
    Jun 13, 2013 @ 07:23:00

    Kalau menggunakan database Oracle apakah sama aja? atau ada “settingan” yang sedikit berbeda?

    Balas

  6. Riyan Permadi
    Des 03, 2016 @ 10:46:47

    Mas mw tanyak Knapa di void Isitable()
    kok for ( Mahasiswa mhs : list ) -> itu kok Object cannt convert to Mahasiswa ??

    KNpa demikan gmn cara yang bener convertnya

    Balas

Tinggalkan Balasan ke Riyan Permadi Batalkan balasan