-->

Membuat load otomatis database dari mysql ke jtable dengan fungsi CRUD menggunakan JPA

Okeh langsung saja pada kesempatan ini ane ingin memberikan tutorial bagaimana cara membuat sebuah project dengan menggunakan fungsi CRUD dengan JPA untuk membuat form CRUD data. JPA yang akan ane gunakan disini adalah EclipseLink

Pada kesempatan ini ane ingin mendemonstrasikan bagaimana mudahnya membuat CRUD JPA dengan menggunakan netbean..

Target yang akan kita buat pada kesempatan kali ini yaitu dengan menggunakan contoh gambar pada gambar di bawah ini.



Jangan lupa untuk menghidupkan server MySQLnya dulu
Target dari database yang ingin kita gunakan seperti ini
-- --------------------------------------------------------

--
-- Table structure for table `guru`
--

CREATE TABLE IF NOT EXISTS `guru` (
  `kodeguru` int(2) NOT NULL COMMENT 'serial (auto increment)',
  `nama` varchar(100) DEFAULT NULL,
  `nohp` varchar(15) DEFAULT NULL,
  `jabatan_id_FK` int(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`kodeguru`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='kodeguru: auto increment';

Okeh setelah dapat tabelnya seperti apa langsung saja bagaimana caranya membuat entity pada Netbean.Pertama kali buat New=> Project



Setelah Projectnya terbuat sekarang klik kanan pada project tersebut klik kanan kemudian pilih new => Entity Classess from Database 

Kemudian Pilih Koneksi Database yang diinginkan. Pada kesempatan ini yang ane praktekin adalah tabel Guru.


Nah jika belum ada default koneksi silahkan buat dulu koneksi yang akan digunakan


Setelah setting koneksi selesai sekarang tentukan hasil dari JPA yang terbentuk untuk dijadikan List



 Nah untuk melihat setting dari penggunaan EclipseLink buka pada package META-INF ada file persistence .xml dan settingnya sebagai berikut


Selesai. Pembuatan entity untuk database yang digunakan.
Okeh setelah itu Entity Guru akan terbentuk otomatis seperti berikut ini :

package tutorialjpa;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author mrhands
 */
@Entity
@Table(name = "guru")
@NamedQueries({
    @NamedQuery(name = "Guru.findAll", query = "SELECT g FROM Guru g"),
    @NamedQuery(name = "Guru.findByKodeguru", query = "SELECT g FROM Guru g WHERE g.kodeguru = :kodeguru"),
    @NamedQuery(name = "Guru.findByNama", query = "SELECT g FROM Guru g WHERE g.nama = :nama"),
    @NamedQuery(name = "Guru.findByNohp", query = "SELECT g FROM Guru g WHERE g.nohp = :nohp"),
    @NamedQuery(name = "Guru.findByJabatanidFK", query = "SELECT g FROM Guru g WHERE g.jabatanidFK = :jabatanidFK")})
public class Guru implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "kodeguru")
    private Integer kodeguru;
    @Column(name = "nama")
    private String nama;
    @Column(name = "nohp")
    private String nohp;
    @Basic(optional = false)
    @Column(name = "jabatan_id_FK")
    private int jabatanidFK;

    public Guru() {
    }

    public Guru(Integer kodeguru) {
        this.kodeguru = kodeguru;
    }

    public Guru(Integer kodeguru, int jabatanidFK) {
        this.kodeguru = kodeguru;
        this.jabatanidFK = jabatanidFK;
    }

    public Integer getKodeguru() {
        return kodeguru;
    }

    public void setKodeguru(Integer kodeguru) {
        this.kodeguru = kodeguru;
    }

    public String getNama() {
        return nama;
    }

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

    public String getNohp() {
        return nohp;
    }

    public void setNohp(String nohp) {
        this.nohp = nohp;
    }

    public int getJabatanidFK() {
        return jabatanidFK;
    }

    public void setJabatanidFK(int jabatanidFK) {
        this.jabatanidFK = jabatanidFK;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (kodeguru != null ? kodeguru.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 Guru)) {
            return false;
        }
        Guru other = (Guru) object;
        if ((this.kodeguru == null && other.kodeguru != null) || (this.kodeguru != null && !this.kodeguru.equals(other.kodeguru))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "tutorialjpa.Guru[kodeguru=" + kodeguru + "]";
    }

}

Nah standar2 SQL akan otomatis terbentuk dari pembentukan dtabase tersebut.
Setelah itu kita akan membuat Object2 yang diperlukan seperti TabelModel kemudian JFrame yang akan kita gunakan untuk menampilkan data pada JTable.

Setelah itu kita buat Manager untuk pembuatan entity manager yang akan kita gunakan nanti

package tutorialjpa;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author mrhands
 */
public class Manager {

    public static EntityManager getEntityManager() {
        EntityManager em = null;
        try {
            EntityManagerFactory factory = Persistence.createEntityManagerFactory("TutorialJPAPU");
            em = factory.createEntityManager();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return em;
    }
}

Setelah pembuatan entitiy manager diatas sekarang dibuat interface tentang fungsi CRUD


package tutorialjpa;

import java.util.List;

/**
 *
 * @author mrhands
 */
public interface Aksi {
    public static int SUKSES=1,GAGAL=0;
    public int insert(T object);
    public int update(T object);
    public int delete(Object primaryKey);
    public List getListAll();
}

setelah itu buat fungsi crudnya beserta tabel model yang akan digunakan

package tutorialjpa;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author mrhands
 */
public class DefaultTabelModel extends AbstractTableModel {

    List list;
    T E;
    Aksi aksi;
    private final EntityManager em;
    String[] columnName, columnNameNew;

    public String[] getColumnName() {
        return columnNameNew;
    }

    public List getList() {
        return list;
    }

    public void setColumnName(String[] columnName) {
        this.columnNameNew = columnName;
    }

    public DefaultTabelModel(T t, Aksi aksi) {
//        this.columnName = columnName;
        em = Manager.getEntityManager();
        E = t;
        Field f[] = E.getClass().getDeclaredFields();
        columnName = new String[f.length - 1];
        int counter = 0;
        for (Field fi : f) {
            if (!fi.getName().contains("serial")) {
                columnName[counter] = fi.getName();
                counter++;
            }
        }
        this.aksi = aksi;
        this.list = aksi.getListAll();

    }
    public DefaultTabelModel(T t, Aksi aksi,String [] columnName) {
        this.columnName = columnName;
        em = Manager.getEntityManager();
        this.aksi = aksi;
        this.list = aksi.getListAll();

    }

    public Object getPrimaryKeyValue(T object) {
        Field primaryKey = null;
        Field[] f = object.getClass().getDeclaredFields();
        Class noparams[] = {};
        for (Field fi : f) {
            Annotation[] a = fi.getAnnotations();
            for (Annotation ai : a) {
                String name = ai.annotationType().getSimpleName();
                if (name.toLowerCase().equals("id")) {
                    primaryKey = fi;
                    break;
                }

            }
        }
        Object primaryKeyValue = null;
        Method primaryMethod = null;
        Method m[] = object.getClass().getMethods();
        for (Method mi : m) {
            //temukan method yang merupakan primari key dengan key get
            if (mi.getName().toLowerCase().contains(primaryKey.getName()) && mi.getName().toLowerCase().contains("get")) {
                primaryMethod = mi;
                break;
            }
        }
        try {
            primaryKeyValue = primaryMethod.invoke(object, noparams);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(DefaultTabelModel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(DefaultTabelModel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(DefaultTabelModel.class.getName()).log(Level.SEVERE, null, ex);
        }
        return primaryKeyValue;

    }

    public void add(T object) {
        list.add(object);
        if (this.aksi != null) {
            aksi.insert(object);
        }
        fireTableDataChanged();
    }

    public void update(int index, T object) {
        list.set(index, object);
        if (this.aksi != null) {
            aksi.update(object);
        }
        fireTableRowsUpdated(index, index);
    }

    public void delete(int index) {
        if (this.aksi != null) {
            aksi.delete(getPrimaryKeyValue(list.get(index)));
        }
        list.remove(index);
        fireTableRowsDeleted(index, index);
    }

    @Override
    public int getRowCount() {
        return list.size();
    }

    @Override
    public int getColumnCount() {
        //ingat field serialUI tidak disertakan
        return list.get(0).getClass().getDeclaredFields().length - 1;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Object hasil = null;
        Class noparams[] = {};
        T objk = list.get(rowIndex);
        Class obj = list.get(rowIndex).getClass();
        Method m[] = obj.getMethods();
        Method mi = null;
        for (int i = 0; i < m.length; i++) {
            Method mo = m[i];
            if (mo.getName().toLowerCase().contains(columnName[columnIndex].toLowerCase())) {
                mi = mo;
                break;
            }

        }
        int counter = 0;
        String methodName = mi.getName();
        if (methodName.contains("get")) {
            //invoke method selain getClass dari paling awal
            try {
                hasil = mi.invoke(objk, noparams);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(DefaultTabelModel.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalArgumentException ex) {
                Logger.getLogger(DefaultTabelModel.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InvocationTargetException ex) {
                Logger.getLogger(DefaultTabelModel.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return hasil;
    }

    @Override
    public String getColumnName(int column) {
        if (columnNameNew != null) {
            return columnNameNew[column];
        } else {
            return columnName[column];
        }
    }
}

Setelah itu coba kita buat diimplementasikan ke dalam JPanel

codingnya sebagai berikut :
package ihbs.query.view;

import ihbs.entity.Guru;
import ihbs.entity.entitymanager.Manager;
import ihbs.entity.tabelmodel.Aksi;
import ihbs.entity.tabelmodel.DefaultTabelModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;

/**
 *
 * @author mrhands
 */
public class GuruView extends javax.swing.JPanel {

    DefaultTabelModel tabelModel;
    String fieldName[] = new String[]{"Kode Guru", "Nama Guru", "No Hp", "Jabatan"};
    EntityManager em;

    /** Creates new form Guru */
    public GuruView() {
        initComponents();
        em = Manager.getEntityManager();
        Aksi a=new Aksi() {
            @Override
            public int insert(Guru object) {
                try {
                    em.getTransaction().begin();
                    em.persist(object);
                    em.getTransaction().commit();
                } catch (Exception e) {
                    return Aksi.GAGAL;
                }
                return Aksi.SUKSES;
            }

            @Override
            public int update(Guru object) {
                try {
                    em.getTransaction().begin();
                    Guru g = em.find(Guru.class, object.getKodeguru());
                    g.setJabatanidFK(object.getJabatanidFK());
                    g.setNama(object.getNama());
                    g.setNohp(object.getNohp());
                    em.getTransaction().commit();
                } catch (Exception e) {
                    return Aksi.GAGAL;
                }
                return Aksi.SUKSES;
            }

            @Override
            public int delete(Object primaryKey) {
                try {
                    em.getTransaction().begin();
                    Guru g = em.find(Guru.class, primaryKey);
                    em.remove(g);
                    em.getTransaction().commit();
                } catch (Exception e) {
                    return Aksi.GAGAL;
                }
                return Aksi.SUKSES;
            }

            @Override
            public List getListAll() {
                TypedQuery query =
                        (TypedQuery) em.createNamedQuery ("Guru.findAll", Guru.class);
                return query.getResultList();
            }
        };
        tabelModel = new DefaultTabelModel(new Guru(),a);
        tabelGuru.setModel(tabelModel);

        btnTambahGuru.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                Guru g = new Guru();
                g.setJabatanidFK(1);
                g.setKodeguru(9999);
                g.setNama("Handita Okviyanto");
                g.setNohp("085710357348");
                tabelModel.add(g);
            }
        });
        btnHapusGuru.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                tabelModel.delete(tabelGuru.getSelectedRow());
            }
        });
        btnUpdateGuru.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                Guru g=new Guru(tabelModel.getList().get(tabelGuru.getSelectedRow()).getKodeguru());
                g.setJabatanidFK(76);
                g.setNama("Hands");
                g.setNohp("003923");
                tabelModel.update(tabelGuru.getSelectedRow(), g);

            }
        });
    }


    private void btnHapusGuruActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    }

    // Variables declaration - do not modify
    private javax.swing.JButton btnHapusGuru;
    private javax.swing.JButton btnTambahGuru;
    private javax.swing.JButton btnUpdateGuru;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable tabelGuru;
    // End of variables declaration
}
Previewnya seperti ini nih..

File projectnya sebagai berikut :


Buat scroll pane dan tambahkan JScrollPane seperti berikut ini kode mainnya..

public class MainFrame extends javax.swing.JFrame {

    /** Creates new form MainFrame */
    public MainFrame() {
        initComponents();
        scrollPane.setViewportView(new GuruView());
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // 
    private void initComponents() {

        scrollPane = new javax.swing.JScrollPane();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.FlowLayout());
        getContentPane().add(scrollPane);

        pack();
    }// 

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                try {
                    UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel());
                    new MainFrame().setVisible(true);
                } catch (UnsupportedLookAndFeelException ex) {
                    Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JScrollPane scrollPane;
    // End of variables declaration
}


Setelah itu running programmnya semoga sukses..
Facebook Comments

0 komentar