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..
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.
setelah itu atur coneksi kedatabase kita dengan memilih new connection..
disini silahkan atur nama nama database, username serta password di mysql anda. kalo di code yang saya upload user dan passwordnya root dan root.
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.
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.
mulkan
Jul 15, 2011 @ 22:34:35
pusing..he… hee… aku malah pakai persist ajalah.. haa
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.
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.. π
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…
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 π
Raka
Jun 13, 2013 @ 07:23:00
Kalau menggunakan database Oracle apakah sama aja? atau ada “settingan” yang sedikit berbeda?
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