Pada artikel kali ini akan membuat CRUD ( Create Update Delete Read ) MVC ZK Framework menggunakan hibernate dan database postgres di Netbeans.
Tools yang digunakan :
- Netbeans,
- Glassfish sever,
- postgres database.
Kesiapan yang sebelum membuat project :
- JDK & Netbeans sudah terinstall : Install JDK ( Java Development Kit )
- Framewordk ZKoss sudah terinstall : Instalasi ZK Framework pada Netbean & Eclipse
- Setting Database : Install Postgresql di Windows 10 , Install PostgreSQL di Ubuntu
Berikut adalah cara membuat CRUD menggunakan ZKoss Hibernate
1. Buat Table
CREATE TABLE public.mahasiswa
(
nama character(30),
id integer NOT NULL DEFAULT nextval('mahasiswa_id_seq'::regclass),
nim character(10),
CONSTRAINT id_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.mahasiswa
OWNER TO postgres;
2. Buat Project
2.1. Buat Project ZK
2.2. Klik New Project
2.3. Klik Java Web
2.4. Klik ZK700CE JavaEE6 Application , Contoh : ZK Crud
2.5. Setelah itu masukkan library Postegres ke Netbeans
- Klik Kanan Project
- Pilih Properties
- klik Libraries
- lalu klik Add Library
- Pilih PostgreSQL JDBC Drive
- lalu Klik OK
3. Setting Hibernate
Generate Hibernate Configuration Wizard
- Klik pada project
- Klik New
- Klik Hibernate
- Klik Hibernate Configuration Wizard
- Klik Next
- Isi Folder dengan src\java
- Klik Next
- Pilih Database Connection yang sudah dibuat.
Catatan : Jika belum ada database maka
- Pilih New Database Connection
- Pilih Driver, isikan dengan PostgreSQL
- Klik Next
- Isikan host, database, username, password disesuaikan dengan database yang dibuat -->
- Klik Test Connection
- Klik Finish.
Generate Hibernate reverse engineering Wizard,
- klik nanan project
- Klik New
- Klik Hibernate
- Hibernate reverse engineering Wizard
- Klik Next
- Isi Folder dengan src\java
- Klik Next
- Klik Add All
- Klik Finish.
Generate Mapping Files and Pojos :
- klik nanan project
- Klik New
- Klik Hibernate
- Klik Hibernate Mapping Files and POJOs from database
- isikan package dengan model
- Klik Finish.
Catatan : jika tidak bisa generate Mapping Files and POJOs : cek nama table di database harus lowercase semua, jika sudah hapus file hibernate.reveng.xml terus coba generate ulang mulai dari Generate Hibernate reverse engineering Wizard.
Generate HibernateUtils :
- Klik nanan project
- Klik New
- Klik Hibernate
- Isikan HibernateUtil.java
- Klik Next
- isikan package dengan util
- Klik Finish.
4. Design Tampilan: dengan nama file : index.zul
<?xml version="1.0" encoding="UTF-8"?>
<zk xmlns="http://www.zkoss.org/2005/zul">
<window id="win" apply="com.crud.controller.IndexController">
<groupbox id="gb" mold="3d" width="600px">
<caption label="MAHASISWA"/>
<grid>
<columns>
<column align="right" width="150px"/>
<column />
</columns>
<rows>
<row>
<label value="Nim :"/>
<textbox id="txtNim" />
</row>
<row>
<label value="Nama :"/>
<textbox id="txtNama" />
</row>
<row spans="2">
<hbox>
<button id="btnAdd" label="ADD"/>
<button id="btnUpdate" label="UPDATE"/>
<button id="btnDelete" label="DELETE"/>
</hbox>
</row>
</rows>
</grid>
<listbox id="lb" width="600px" mold="paging" pageSize="5">
<listhead>
<listheader label="Nim" />
<listheader label="Nama" />
</listhead>
</listbox>
</groupbox>
</window>
</zk>
5. Buat Render : IndexRenderer.java
import com.crud.vo.Mahasiswa;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
public class IndexRenderer implements ListitemRenderer {
public void render(Listitem lstm, Object t, final int i) throws Exception {
final Mahasiswa data = (Mahasiswa) t;
Listcell cell = new Listcell(String.valueOf(data.getNim()));
cell.setParent(lstm);
cell = new Listcell(data.getNama());
cell.setParent(lstm);
}
}
6. Buat Controller : IndexController.java
import com.crud.renderer.IndexRenderer;
import com.crud.util.HibernateUtil;
import com.crud.vo.Mahasiswa;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Textbox;
/** control CRUD */
public class IndexController extends GenericForwardComposer {
private Listbox lb;
private Textbox txtNim, txtNama;
private List<Mahasiswa> listMhs = new ArrayList<Mahasiswa>();
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
loadData();
}
private void loadData() {
Session sess = HibernateUtil.getSessionFactory().openSession();
Query query = sess.createQuery("from Mahasiswa");
listMhs = query.list();
sess.close();
//set data to listbox
lb.setModel(new ListModelList(listMhs));
lb.setItemRenderer(new IndexRenderer());
}
public void onClick$lb() {
if (lb.getSelectedIndex() != -1) {
txtNim.setValue(String.valueOf(listMhs.get(lb.getSelectedIndex()).getNim()));
txtNama.setValue(listMhs.get(lb.getSelectedIndex()).getNama());
} else {
alert("Pilih Salah Data");
}
}
public void onClick$btnAdd() {
if (!txtNama.getValue().trim().equals("") && !txtNim.getValue().trim().equals("")) {
Session sess = HibernateUtil.getSessionFactory().openSession();
sess.beginTransaction();
Integer id = ((BigInteger) sess.createSQLQuery("select nextval('mahasiswa_id_seq')").uniqueResult()).intValue();
Mahasiswa data = new Mahasiswa();
data.setId(id);
data.setNim(txtNim.getValue());
data.setNama(txtNama.getValue());
sess.save(data);
sess.getTransaction().commit();
sess.close();
loadData();
clearField();
alert("Added");
} else {
alert("Nama dan NIM tidak boleh kosong");
}
}
public void onClick$btnUpdate() {
if (!txtNama.getValue().trim().equals("") && !txtNim.getValue().trim().equals("")) {
Session sess = HibernateUtil.getSessionFactory().openSession();
sess.beginTransaction();
Mahasiswa obj = (Mahasiswa) sess.get(Mahasiswa.class, listMhs.get(lb.getSelectedIndex()).getId());
obj.setNama(txtNama.getValue());
obj.setNim(txtNim.getValue());
sess.update(obj);
sess.getTransaction().commit();
sess.close();
loadData();
clearField();
alert("Updated");
} else {
alert("Nama dan NIM tidak boleh kosong");
}
}
public void onClick$btnDelete() {
if (!txtNama.getValue().trim().equals("") && !txtNim.getValue().trim().equals("")) {
Session sess = HibernateUtil.getSessionFactory().openSession();
sess.beginTransaction();
Mahasiswa obj = (Mahasiswa) sess.get(Mahasiswa.class, listMhs.get(lb.getSelectedIndex()).getId());
sess.delete(obj);
sess.getTransaction().commit();
sess.close();
loadData();
clearField();
alert("Deleted");
} else {
alert("Nama dan NIM tidak boleh kosong");
}
}
private void clearField() {
txtNim.setValue("");
txtNama.setValue("");
}
}