Friday, May 6, 2011

Create CRUD Application with Netbeans Using JPA

Report 21 Februari 2011

By : Febrinaldi

Create CRUD Application with Netbeans Using JPA

Description :

Creating a Java application that aims to manipulate the database using the Java Persistence API library (JPA).

The program will be made to be look like this:











Programs
may input, modify and delete in the form of Nim, Nama and Alamat. The Database stored in MySQL which name is testjpa.

Steps:

1. First, create database in MySQL name: testjpa

2. Create new project in Netbeans

3. Choose Java Application

4. Fill the form as you see below

5. Then "TestJPACrud" project structure will be created in left side "Package Explorer" window

6. Create New Entity Class

7. Edit the Provider and Database properties

8. Choose New Database Connection

9. In Mahasiswa.java add getter and setter for needed fields

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package jpa.entity;

import java.io.Serializable;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

/**

*

* @author win7

*/

@Entity

public class Mahasiswa implements Serializable {

private static final long serialVersionUID = 1L;

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

3 fields it means 3 fields too in testjpa table

private String id;

private String nama;

private String alamat;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getNama() {

Getter and setter for those fields

return nama;

}

public void setNama(String nama) {

this.nama = nama;

}

public String getAlamat() {

return alamat;

}

public void setAlamat(String alamat) {

this.alamat = alamat;

}

@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 "jpa.entity.Mahasiswa[id=" + id + "]";

}

}

10. And then Create new file MahasiswaModel.java in package jpa.model

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package jpa.model;

import jpa.entity.Mahasiswa;

import java.util.List;

import javax.persistence.EntityManager;

import javax.persistence.RollbackException;

/**

*

* @author bahrie

*/

public class MahasiswaModel {

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();

}

}

11. Then create new file MahasiswaController.java in package jpa.controller

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package jpa.controller;

import jpa.model.MahasiswaModel;

import jpa.entity.Mahasiswa;

import java.util.List;

import javax.persistence.EntityManager;

import javax.persistence.RollbackException;

/**

*

* @author bahrie

*/

public class MahasiswaController {

MahasiswaModel mahasiswaModel;

EntityManager entityManager;

public MahasiswaController(EntityManager entityManager) {

setEntityManager(entityManager);

}

public void setEntityManager(EntityManager entityManager) {

this.entityManager = entityManager;

mahasiswaModel=new MahasiswaModel();

mahasiswaModel.setEntityManager(entityManager);

}

public void save(Mahasiswa mhs){

try{

entityManager.getTransaction().begin();

mahasiswaModel.save(mhs);

entityManager.getTransaction().commit();

}catch(RollbackException ex){

entityManager.getTransaction().rollback();

}

}

public void delete(Mahasiswa mhs){

try{

entityManager.getTransaction().begin();

mahasiswaModel.delete(mhs);

entityManager.getTransaction().commit();

}catch(RollbackException ex){

entityManager.getTransaction().rollback();

}

}

public Mahasiswa getMhs(String mhs){

return mahasiswaModel.getMahasiswa(mhs);

}

public List getAllMhs(){

return mahasiswaModel.getAllMahasiswa();

}

}

12. Now, let’s design the interface and the action within, as you see code below

Name File: FormMhsJpa.java

Package : jpa.view

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

/*

* FormMhsJpa.java

*

* Created on Dec 14, 2010, 12:59:06 PM

*/

package jpa.view;

import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;

import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;

import jpa.entity.Mahasiswa;

import jpa.controller.MahasiswaController;

import java.util.ArrayList;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.persistence.EntityManager;

import javax.persistence.Persistence;

import javax.swing.JOptionPane;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

import javax.swing.plaf.multi.MultiLookAndFeel;

import javax.swing.table.DefaultTableModel;

/**

*

* @author bahrie

*/

public class FormMhsJpa extends javax.swing.JFrame {

private EntityManager entityManager;

private MahasiswaController serviceMahasiswa;

List list = new ArrayList();

/** Creates new form FormMhsJpa */

public FormMhsJpa() {

initComponents();

entityManager = Persistence.createEntityManagerFactory("TestJpaCrudPU").createEntityManager();

serviceMahasiswa = new MahasiswaController(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;

}

}

/** 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() {

jPanel1 = new javax.swing.JPanel();

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

txtNim = new javax.swing.JTextField();

txtNama = new javax.swing.JTextField();

txtAlamat = new javax.swing.JTextField();

btnTambah = new javax.swing.JButton();

btnUbah = new javax.swing.JButton();

btnHapus = new javax.swing.JButton();

jPanel2 = new javax.swing.JPanel();

jScrollPane1 = new javax.swing.JScrollPane();

tableMahasiswa = new javax.swing.JTable();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));

jLabel1.setText("Nim : ");

jLabel2.setText("Nama : ");

jLabel3.setText("Alamat : ");

btnTambah.setText("Tambah");

btnTambah.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

btnTambahActionPerformed(evt);

}

});

btnUbah.setText("Ubah");

btnUbah.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

btnUbahActionPerformed(evt);

}

});

btnHapus.setText("Hapus");

btnHapus.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

btnHapusActionPerformed(evt);

}

});

jPanel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));

tableMahasiswa.setModel(new javax.swing.table.DefaultTableModel(

new Object [][] {

{null, null, null, null},

{null, null, null, null},

{null, null, null, null},

{null, null, null, null}

},

new String [] {

"Title 1", "Title 2", "Title 3", "Title 4"

}

));

jScrollPane1.setViewportView(tableMahasiswa);

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);

jPanel2.setLayout(jPanel2Layout);

jPanel2Layout.setHorizontalGroup(

jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 457, Short.MAX_VALUE)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addGap(11, 11, 11)

.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 436, Short.MAX_VALUE)

.addContainerGap()))

);

jPanel2Layout.setVerticalGroup(

jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGap(0, 282, Short.MAX_VALUE)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel2Layout.createSequentialGroup()

.addContainerGap()

.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 237, javax.swing.GroupLayout.PREFERRED_SIZE)

.addContainerGap(34, Short.MAX_VALUE)))

);

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);

jPanel1.setLayout(jPanel1Layout);

jPanel1Layout.setHorizontalGroup(

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel1Layout.createSequentialGroup()

.addContainerGap()

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING)

.addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING)

.addComponent(jLabel1, javax.swing.GroupLayout.Alignment.TRAILING))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel1Layout.createSequentialGroup()

.addComponent(btnTambah, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(btnUbah, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(btnHapus, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE))

.addComponent(txtAlamat, javax.swing.GroupLayout.DEFAULT_SIZE, 392, Short.MAX_VALUE)

.addComponent(txtNim, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(txtNama, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE))

.addContainerGap())

.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

);

jPanel1Layout.setVerticalGroup(

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(jPanel1Layout.createSequentialGroup()

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel1)

.addComponent(txtNim, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel2)

.addComponent(txtNama, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(jLabel3)

.addComponent(txtAlamat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

.addComponent(btnTambah)

.addComponent(btnUbah)

.addComponent(btnHapus))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)

.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))

);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

);

pack();

}//

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 btnHapusActionPerformed(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();

}

}

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new FormMhsJpa().setVisible(true);

}

});

}

// Variables declaration - do not modify

private javax.swing.JButton btnHapus;

private javax.swing.JButton btnTambah;

private javax.swing.JButton btnUbah;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JPanel jPanel1;

private javax.swing.JPanel jPanel2;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JTable tableMahasiswa;

private javax.swing.JTextField txtAlamat;

private javax.swing.JTextField txtNama;

private javax.swing.JTextField txtNim;

// End of variables declaration

}

13. The folder structure seems to be like this

14. Now Run the Program

Note

Dont forget to import MySQL connector library

--

Conclusion:

if we use the JPA, we only create the database only, and the table will be created automatically by jpa, by taking a table of the entity class that we make. So a class and the table created in one time work, to make 2 results: tables and entity class.