Top Banner
Menggunakan iBATIS DAO dan iBATIS Data Mapper Framework Pada Aplikasi Swing Martinus Ady H. http://pemula.blogsome.com/ [email protected] Juni 2007
41

Ibatis Swing

Jun 27, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ibatis Swing

Menggunakan iBATIS DAO dan

iBATIS Data Mapper FrameworkPada Aplikasi Swing

Martinus Ady H.

http://pemula.blogsome.com/[email protected]

Juni 2007

Page 2: Ibatis Swing

Apakah Ibatis Itu ?Ibatis adalah sebuah DataBase Mapping Framework yang akan membantu

mengurangi kompleksitas jumlah kode java yang perlu kita tulis dalam pengaksesan database.

Mengapa kita memerlukan Ibatis ?Biasanya dalam penulisan kode untuk mengakses kedalam database, struktur

kode java kita kurang lebih sebagai berikut:

public void cekNoTransaksi(final int nomor) {Statement stat = null;ResultSet result = null;try {

// ...} catch (SQLException sqle) {

System.out.println("SQLException caught: " + sqle);} catch(Exception et) {

System.out.println("Connection can't be closed : " + et);} finally {

try {                 // ...

} catch (SQLException sql) {System.out.println(sql);

}}

}

Dengan menggunakan Ibatis kita hanya perlu menulis kode kurang lebih sebagai berikut:

public DaerahPemasaran selectDasarByKode(final String dhKode) {        DaerahPemasaran dasar = new DaerahPemasaran();        dasar.setDhKode(dhKode);                DaerahPemasaran result = (DaerahPemasaran) queryForObject("getDaerahByKode", dasar);                return result;    }

Koq sedikit sekali ? Ya, karena semua keperluan untuk koneksi ke database, sintaks untuk keperluan query dan konfigurasi database sudah ditangani oleh Ibatis. Tetapi ada beberapa langkah yang harus dilakukan agar Ibatis dapat bekerja dengan baik, langkah-langkah yang perlu dilakukan adalah kita harus mendefinisikan dahulu apa yang akan Ibatis kerjakan ke dalam file .xml :)

Sebelum mulai latihan ini, ada beberapa hal yang perlu disiapkan yaitu:1. NetBeans IDE 5.5 + JDK1.6.2. MySQL.3. Library iBatis. (Library ibatis sudah terdapat dalam sample.zip.)

Page 3: Ibatis Swing

Ok, sekarang kita mulai latihannya :)

1. Pembuatan DataBase

Pertama-tama kita buat dahulu database tempat kita latihan, buatlah 1 buah database dengan nama latihanibatis pada server MySQL. Kurang lebih sebagai berikut:

$ mysql ­u root ­pEnter password:Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 20 to server version: 4.0.23a

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql> create database latihanibatis;Query OK, 1 row affected (0.00 sec)

Nah setelah sebuah database terbuat, ketikkan perintah berikut pada terminal atau DOS Prompt anda:

$ mysql ­u root ­p < Mahasiswa.sqlEnter password:$

Note: File Mahasiswa.sql dapat ditemukan dalam file sample.zip atau bisa di download disini.

Proses diatas akan membuat sebuah table Mahasiswa dan kemudian mengisi table tersebut dengan beberapa record yang telah berisi data Mahasiswa.

2. Persiapan Project

Bukalah IDE NetBeans kemudian pilih Project > New Project. Pada panel Wizard pertama pilihlah General pada Categories kemudian pilihlah Java Application pada Projects kemudian tekan tombol Next. Pada panel wizard kedua, isikan LatihanIbatis pada Projects Names: kemudian tekan tombol Finish. Setelah menekan tombol Finish maka terbukalah Java Editor dihapan kita. :)

3. Memasukkan Library Ibatis Ke Dalam Project.

Library-library Ibatis yang diperlukan dalam Project ini antara lain:– ibatis-common-2.jar– ibatis-dao-2.jar dan– ibatis-sqlmap-2.jar.– mysql-connector-java-5.0.4-bin.jarNote: Semua library tersebut sudah terdapat dalam sample.zip yang terdapat pada folder library.

Page 4: Ibatis Swing

Sekarang kopikan direktori library yang terdapat dalam sample.zip ke dalam direktori project NetBeans sehingga struktur direktorinya menjadi seperti berikut:

Setelah direktori library dikopikan ke dalam direktori project NetBeans, agar library-library tersebut masuk ke dalam classpath pada waktu kompilasi dan menjalankan program. Maka tambahkan library tersebut pada project dengan cara sebagai berikut:

1. Ekspand Root Project pada NetBeans, kemudian klik kanan node Libraries kemudian pilih Add Jar/Folder seperti gambar berikut:

2. Setelah terbuka panel Add Library, arahkan ke direktori library dan kemudian select all semua library yang terdapat pada direktori library seperti gambar dibawah ini:

Page 5: Ibatis Swing

3. Setelah menambahkan library tersebut, maka pada NetBeans tampilannya akan menjadi seperti berikut:

Jika tampilan pada NetBeans seperti pada gambar diatas, maka bisa dianggap library Ibatis sudah siap dipakai untuk mulai membuat aplikasinya :)

4. Pembuatan Aplikasi Mahasiswa.

Untuk mulai membuat aplikasi mahasiswa yang menggunakan Ibatis sebagai DAO dan DataBase Mapping Framework -nya, buatlah dulu 6 buah package yaitu:– dao, package ini digunakan untuk menempatkan kode DAO dan Implementasi

DAO yang akan digunakan.– domain, package ini digunakan untuk menampung Java Bean yang

merepresentasikan tiap-tiap tabel pada database.– sqlmapping, package ini untuk menempatkan seluruh sqlmapping yang berupa

file xml.– ui, package ini menampung kode java yang membangun tampilan atau menu.

Page 6: Ibatis Swing

– ui.event, package ini digunakan untuk menampung seluruh event yang terjadi pada menu.

– images, folder ini digunakan untuk menaruh icon-icon yang digunakan.– properties, package ini digunakan sebagai penampung file database

properties

Jika pembuatan package sudah selesai maka tampilan Project di NetBeans kurang lebih seperti gambar dibawah ini:

Untuk mulai memakai DAO dan SQLMapping milik Ibatis ke dalam aplikasi yang akan kita buat, langkah-langkah yang harus dilakukan adalah:

1. Buat file database properties.2. Buat Java Beans untuk tiap-tiap table.3. Buat SQL Mapping yang menghubungkan Java Object dan table yang terdapat

pada database.4. Buat file konfigurasi untuk tiap-tiap SQL Mapping yang telah dibuat.5. Buat file konfigurasi DAOnya.6. Buat DAO dan Implementasinya.7. Jalankan Ibatis dari aplikasi Swing.

Untuk langkah pertama, buatlah file db.properties pada package properties dengan cara klik kanan package properties kemudian pilih New > Others pada pilihan Categories dan pilih Properties File pada pilihan File Types setelah itu tekan tombol Next. Pada panel wizard kedua, isikan db pada File Name kemudian tekan tombol Finish. Setelah itu pastekan kode dibawah ini kedalam file db.properties yang telah dibuat:

Page 7: Ibatis Swing

# Sample ResourceBundle properties file

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost/latihanibatisusername=rootpassword=terserah

Note: Untuk isian password, isikan sesuai pada database yang digunakan.

Setelah membuat file db.properties, sekarang klik kanan pada package domain kemudian pilih New > Java Class. Isikan Mahasiswa pada File Name kemudian klik tombol Finish. Setelah menekan tombol Finish, pastekan kode dibawah ini ke dalam file Mahasiswa.java yang telah dibuat:

/* * Mahasiswa.java * * Created on June 18, 2007, 8:49 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */

package latihanibatis.domain;

/** * * @author javamaniac */public class Mahasiswa {        private int nim;    private String nama;    private String alamat;    private String kota;    private String keterangan;        /** Creates a new instance of Mahasiswa */    public Mahasiswa() {    }            public Mahasiswa(int nim, String nama, String alamat, String kota,         String ket) {                this.nim = nim;        this.nama = nama;        this.alamat = alamat;        this.kota = kota;        this.keterangan = ket;    }

    public int getNim() {        return nim;    }

    public void setNim(int nim) {        this.nim = nim;

Page 8: Ibatis Swing

    }

    public String getNama() {        return nama;    }

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

    public String getAlamat() {        return alamat;    }

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

    public String getKota() {        return kota;    }

    public void setKota(String kota) {        this.kota = kota;    }

    public String getKeterangan() {        return keterangan;    }

    public void setKeterangan(String keterangan) {        this.keterangan = keterangan;    }}

Class Mahasiswa.java diatas ini adalah sebuah Java Beans biasa, sedangkan Java Beans itu sendiri adalah sebuah Class Java yang mempunyai method get dan setter.

Langkah selanjutnya setelah proses pembuatan Class Mahasiswa selesai, kita perlu melakukan mapping atau menghubungkan antara tabel Mahasiswa pada Database dengan Class Mahasiswa. Untuk melakukan mapping tersebut, klik kanan pada package sqlmapping kemudian pilih New > XML Document. Isikan Mahasiswa pada File Name kemudian klik tombol Next, pada panel wizard yang kedua pilihlah Type Well-formed Document setelah itu klik tombol Finish. Setelah menekan tombol Finish, pastekan kode dibawah ini ke dalam file Mahasiswa.xml yang telah dibuat:

Page 9: Ibatis Swing

<?xml version="1.0" encoding="UTF­8" ?><!DOCTYPE sqlMap PUBLIC "­//ibatis.apache.org//DTD SQL Map 2.0//EN""http://ibatis.apache.org/dtd/sql­map­2.dtd">

<sqlMap namespace="Mahasiswa">        <typeAlias alias="mhs" type="latihanibatis.domain.Mahasiswa" />        <resultMap id="mhsResult" class="mhs">        <result column="NIM" property="nim" jdbcType="INTEGER" />        <result column="NAMA" property="nama" jdbcType="VARCHAR" nullValue="" />        <result column="ALAMAT" property="alamat" jdbcType="VARCHAR" nullValue="" />        <result column="KOTA" property="kota" jdbcType="VARCHAR" nullValue="" />        <result column="KETER" property="keterangan" jdbcType="VARCHAR" nullValue="" />    </resultMap>        <insert id="insertMhs" parameterClass="mhs">        INSERT INTO Mahasiswa (NIM, NAMA, ALAMAT, KOTA, KETER)        VALUES (#nim#, #nama#, #alamat#, #kota#,  #keterangan#)    </insert>         <update id="updateMhs">        UPDATE Mahasiswa SET            Mahasiswa.NAMA = #newNama#,            Mahasiswa.ALAMAT = #newAlamat#,            Mahasiswa.KOTA = #newKota#,            Mahasiswa.KETER = #newNote#        WHERE Mahasiswa.NIM = #nim#    </update>        <delete id="hapusMhs" parameterClass="mhs">        DELETE FROM Mahasiswa        WHERE Mahasiswa.NIM = #nim:INTEGER#    </delete>        <select id="selectAllMhs" resultMap="mhsResult" parameterClass="mhs">        SELECT * FROM Mahasiswa    </select>        <select id="getMhsByNim" resultMap="mhsResult" parameterClass="mhs">        SELECT * FROM Mahasiswa        WHERE Mahasiswa.NIM = #nim:INTEGER#    </select>        <select id="searchMhs" resultMap="mhsResult">        SELECT * FROM Mahasiswa        WHERE             Mahasiswa.NIM like #nim# AND            (Mahasiswa.NAMA IS NULL OR Mahasiswa.NAMA like #nama#) AND            (Mahasiswa.ALAMAT IS NULL OR Mahasiswa.ALAMAT like #alamat#) AND            (Mahasiswa.KOTA IS NULL OR Mahasiswa.KOTA like #kota#) AND            (Mahasiswa.KETER IS NULL OR Mahasiswa.KETER like #keterangan#)    </select>   </sqlMap>

Page 10: Ibatis Swing

Penjelasan untuk SQL Mapping diatas adalah sebagai berikut:1. Proses penulisan diawali oleh tag <sqlMap namespace="Mahasiswa"> yang

memberitahukan kepada Ibatis kalau kita telah membuat sebuah sqlMap dengan nama Mahasiswa.

2. Sedangkan pada baris selanjutnya element <typeAlias="mhs" type="latihanibatis.domain.Mahasiswa"> ini berfungsi agar kita tidak perlu menuliskan secara lengkap dimana letak Class Mahasiswa berada tapi cukup menuliskan aliasnya saja yaitu mhs.

3. Element selanjutnya yang paling penting yaitu element <resultMap id="mhsResult" class="mhs">, karena element ini bertugas me-mapping field-field yang terdapat pada Class Mahasiswa ke kolom tabel Mahasiswa. Mapping tersebut dapat dilihat pada baris berikut:

<result column="NIM" property="nim" jdbcType="INTEGER" />

column di element resultMap ini adalah nama kolom yang terdapat pada tabel Mahasiswa, sedangkanproperty di element resultMap ini adalah properti atau variabel yang terdapat pada Class Mahasiswa.nullValue=”” attribute ini berguna untuk menangani nilai NULL yang didapat dari proses query. Dan pada SQL Mapping diatas, jika query pada database menghasilkan nilai null, maka ganti nilai NULL dengan empty string.

Sedangkan penjelasan untuk proses select, insert, update dan delete pada tabel Mahasiswa yang terdapat pada SQL Mapping diatas dapat dilihat pada statement dibawah ini:

Proses select:<select id="getMhsByNim" resultMap="mhsResult" parameterClass="mhs">    SELECT * FROM Mahasiswa    WHERE Mahasiswa.NIM = #nim:INTEGER#</select>

Statement select id=”getMhsByNim” ini akan menjalankan syntax sql yaitu “SELECT * FROM Mahasiswa WHERE Mahasiswa.NIM = ?” dimana #nim:INTEGER# adalah field nim dari Object Mahasiswa, sedangkan pengiriman parameter Object Mahasiswa dapat dilihat pada baris parameterClass=”mhs” dan hasil dari proses query tersebut ditampung pada resultMap=”mhsResult”. Pengiriman parameter seperti ini, di Ibatis dikenal dengan sebutan Inline Parameter. Untuk lebih jelas lihat sub code disini.

Proses insert:<insert id="insertMhs" parameterClass="mhs">    INSERT INTO Mahasiswa       (NIM, NAMA, ALAMAT, KOTA, KETER)    VALUES       (#nim#, #nama#, #alamat#, #kota#,  #keterangan#)</insert>

Statement insert id=”insertMhs” ini akan menjalankan syntax sql yaitu

Page 11: Ibatis Swing

“INSERT INTO Mahasiswa (NIM, NAMA, ALAMAT, KOTA, KETER) VALUES (?,?,?,?,?)” dimana #nim#, #nama#, #alamat#, #kota# dan #keterangan# adalah field-field yang terdapat pada Object Mahasiswa, sedangkan pengiriman parameter Object Mahasiswa dapat dilihat pada baris parameterClass=”mhs”. Untuk lebih jelas lihat sub code disini.

Proses udpate:    <update id="updateMhs">        UPDATE Mahasiswa SET            Mahasiswa.NAMA = #newNama#,            Mahasiswa.ALAMAT = #newAlamat#,            Mahasiswa.KOTA = #newKota#,            Mahasiswa.KETER = #newNote#        WHERE Mahasiswa.NIM = #nim#    </update>

Statement update id=”updateMhs” ini akan menjalankan syntax sql yaitu “UPDATE Mahasiswa SET Mahasiswa.NAMA = ?, Mahasiswa.ALAMAT = ?, Mahasiswa.NIM = ?, Mahasiswa.KOTA = ?, Mahasiswa.KETER = ? WHERE Mahasiswa.NIM = ? dimana #newNama#,#newALAMAT#,#newKOTA#,#newKETER# dan #newNIM#  adalah sebuah Mapped Parameter. Untuk lebih jelas lihat sub code disini.

Proses delete:<delete id="hapusMhs" parameterClass="mhs">    DELETE FROM Mahasiswa    WHERE Mahasiswa.NIM = #nim:INTEGER#</delete>

Statement delete id=”hapusMhs” ini akan menjalankan syntax sql yaitu “DELETE * FROM Mahasiswa WHERE Mahasiswa.NIM = ?” dimana #nim:INTEGER# adalah field nim dari Object Mahasiswa, sedangkan pengiriman parameter Object Mahasiswa dapat dilihat pada baris parameterClass=”mhs”. Untuk lebih jelas lihat sub code disini.

Setelah proses pembuatan SQL Mapping selesai, sekarang waktunya untuk membuat sql mapping configuration yaitu dengan cara klik kanan pada package sqlmapping kemudian pilih New > XML Document. Isikan sql­mapping­config pada File Name kemudian klik tombol Next, pada panel wizard yang kedua pilihlah Type Well-formed Document setelah itu klik tombol Finish. Setelah menekan tombol Finish, pastekan kode dibawah ini ke dalam file sql­mapping­config.xml yang telah dibuat:

<?xml version="1.0" encoding="UTF­8" ?><!DOCTYPE sqlMapConfig PUBLIC "­//ibatis.apache.org//DTD SQL Map Config 2.0//EN"    "http://ibatis.apache.org/dtd/sql­map­config­2.dtd">

<sqlMapConfig>

  <properties resource="latihanibatis/properties/db.properties"/>

  <transactionManager type="JDBC">

Page 12: Ibatis Swing

    <dataSource type="SIMPLE">      <property value="${driver}" name="JDBC.Driver"/>      <property value="${url}" name="JDBC.ConnectionURL"/>      <property value="${username}" name="JDBC.Username"/>      <property value="${password}" name="JDBC.Password"/>    </dataSource>  </transactionManager>

  <sqlMap resource="latihanibatis/sqlmapping/Mahasiswa.xml"/>

</sqlMapConfig>

Pada Ibatis DataMapper Framework, terdapat 5 implementasi untuk Transaction Manager-nya yaitu: JTA, SQLMAP, HIBERNATE, JDBC dan EXTERNAL. Sedangkan untuk SQL Mapping diatas solusi Transaction Manager yang dipilih adalah JDBC.

Setelah selesai meng-konfigurasi Ibatis Data Mapper sebagai metode persistence-nya, maka langkah selanjutnya adalah menulis konfigurasi dao.xml yang akan digunakan dengan cara klik kanan pada package dao kemudian pilih New > XML Document. Isikan dao pada File Name kemudian klik tombol Next, pada panel wizard yang kedua pilihlah Type Well-formed Document setelah itu klik tombol Finish. Setelah menekan tombol Finish, pastekan kode dibawah ini ke dalam file dao.xml yang telah dibuat:

<?xml version="1.0" encoding="UTF­8"?>

<!DOCTYPE daoConfig    PUBLIC "­//ibatis.apache.org//DTD DAO Configuration 2.0//EN"    "http://ibatis.apache.org/dtd/dao­2.dtd">

<daoConfig>  <context>    <transactionManager type="SQLMAP">      <property name="SqlMapConfigResource"        value="latihanibatis/sqlmapping/sql­mapping­config.xml"/>    </transactionManager>

    <dao interface="latihanibatis.dao.MahasiswaDao"      implementation="latihanibatis.dao.MahasiswaDaoImpl"/>      </context></daoConfig>

Karena menggunakan Data mapper sebagai framework untuk persistence-nya, maka type transactionManager yang harus dipakai pada dao.xml diatas adalah SQLMAP. Setelah menentukan type transactionManager yang digunakan, maka pada baris selanjutnya berikan lokasi dimana letak file sql­mapping­config.xml berada.

Semua prosedur dan konfigurasi Ibatis telah selesai dilakukan, sekarang saatnya untuk mulai mendefinisikan operasi-operasi select, insert, delete dan update dengan membuat sebuah DAO dengan cara klik kanan pada package dao

Page 13: Ibatis Swing

kemudian pilih New > Java Class. Isikan MahasiswaDao pada File Name kemudian klik tombol Finish. Setelah menekan tombol Finish, pastekan kode dibawah ini ke dalam file MahasiswaDao.java yang telah dibuat:

/* * MahasiswaDao.java * * Created on June 18, 2007, 8:20 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */

package latihanibatis.dao;

import com.ibatis.dao.client.Dao;import java.util.List;import java.util.Map;import latihanibatis.domain.Mahasiswa;

/** * * @author javamaniac */public interface MahasiswaDao extends Dao {        public void insertMhs(final Mahasiswa mhsBaru);    public void updateMhs(final Map arrUpdate);    public int deleteMhs(final int prmNIM);        // Query    public List selectAllMhs();    public Mahasiswa selectMhsByNim(final int prmNIM);    public List searchMhs(final Map searchKeyword);}

Setelah membuat MahasiswaDao, sekarang buatlah MahasiswaDaoImpl-nya dengan cara klik kanan pada package dao kemudian pilih New > Java Class. Isikan MahasiswaDaoImpl pada File Name kemudian klik tombol Finish. Setelah menekan tombol Finish, pastekan kode dibawah ini ke dalam file MahasiswaDaoImpl.java yang telah dibuat:

/* * MahasiswaDaoImpl.java * Created on June 20, 2007, 11:43 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */

package latihanibatis.dao;

import com.ibatis.dao.client.DaoManager;

Page 14: Ibatis Swing

import com.ibatis.dao.client.template.SqlMapDaoTemplate;import java.util.List;import java.util.Map;import latihanibatis.domain.Mahasiswa;

/** * * @author javamaniac */public class MahasiswaDaoImpl extends SqlMapDaoTemplate implements MahasiswaDao {        /**     * Creates a new instance of DaerahPasarDaoImpl     *     * @param daoManager     */    public MahasiswaDaoImpl(DaoManager daoManager) {        super(daoManager);    }        public void insertMhs(Mahasiswa mhsBaru) {        try {            daoManager.startTransaction();                        insert("insertMhs", mhsBaru);                        daoManager.commitTransaction();        } finally {            daoManager.endTransaction();        }    }        public void updateMhs(final Map arrUpdate) {        try {            daoManager.startTransaction();                        update("updateMhs", arrUpdate);                        daoManager.commitTransaction();        } finally {            daoManager.endTransaction();        }    }        public int deleteMhs(final int prmNIM) {        Mahasiswa mhsDel = new Mahasiswa();        mhsDel.setNim(prmNIM);                final int row = delete("hapusMhs", mhsDel);                return row;    }        public List selectAllMhs() {        final List list = queryForList("selectAllMhs", null);                return list;    }

Page 15: Ibatis Swing

    public Mahasiswa selectMhsByNim(final int prmNIM) {        Mahasiswa mhs = new Mahasiswa();        mhs.setNim(prmNIM);                final Mahasiswa result = (Mahasiswa) queryForObject("getMhsByNim", mhs);                return result;    }

    public List searchMhs(final Map searchKeyword) {        return queryForList("searchMhs", searchKeyword);    }}

Pada Ibatis DAO Framework terdapat beberapa DAO Template yang dapat digunakan salah satunya yaitu SqlMapDaoTemplate yang dipakai pada MahasiswaDaoImpl diatas. Penggunaan DAO Template ini bergantung pada Transaction Manager yang didefinisikan pada dao.xml. Sedangkan DAO Template yang disediakan oleh Ibatis DAO Framework adalah sebagai berikut:

Template Class Transaction Manager Convenience Method

JdbcDaoTemplate JDBC Connection getConnection()

JtaDaoTemplate JTA Connection getConnection()

SqlMapDaoTemplate SQLMAP SqlMapExecutor getSqlMapExecutor()

HibernateDaoTemplate HIBERNATE Session getSession()

Cara menggunakan DAO Template ini adalah dengan meng-extends Template Class yang sudah tersedia pada DAO Framework yaitu dengan cara sebagai berikut:

public class MahasiswaDaoImpl extends SqlMapDaoTemplate implements MahasiswaDao {

Sedangkan contoh implementasi penggunaan SqlMapDaoTemplate pada MahasiswaDaoImpl diatas yaitu pada method:

    public Mahasiswa selectMhsByNim(final int prmNIM) {        Mahasiswa mhs = new Mahasiswa();        mhs.setNim(prmNIM);                final Mahasiswa result = (Mahasiswa) queryForObject("getMhsByNim", mhs);                return result;    }

Pada method selectMhsByNim diatas, method queryForObject akan mencari Mapped Statement yang mempunyai id “getMhsByNim” dan akan menjalankan statement yang terdapat didalamnya dengan mengirimkan sebuah parameter berupa Object yaitu mhs. Mapped Statement yang dimaksud terdapat pada file Mahasiswa.xml

Page 16: Ibatis Swing

Pembuatan Class MahasiswaDao dan MahasiswaDaoImpl sudah selesai, sekarang bagaimana cara menggunakannya pada aplikasi yang kita buat ?Untuk mulai menggunakannya, langkah yang harus dilakukan pertama kali adalah membaca file konfigurasi yang terdapat pada dao.xml. Sedangkan pada iBATIS DAO Framework, terdapat sebuah class yang berfungsi untuk menangani file-file konfigurasi yaitu pada class DaoManagerBuilder.

Pada class DaoManagerBuilder ini, terdapat sebuah static method yang berfungsi untuk membaca file konfigurasi yaitu buildDaoManager(Reader reader) yang memiliki 1 parameter yaitu Reader. Sedangkan untuk Reader nya, kita dapat menggunakan class com.ibatis.common.resources.Resource yang terdapat pada iBATIS Database Layer. Sedangkan contoh penggunaannya adalah sebagai berikut:

private DaoManager daoManager;private Reader reader;.......try {   reader = Resources.getResourceAsReader("latihanibatis/dao/dao.xml");} catch (IOException ex) {   ex.printStackTrace();}daoManager = DaoManagerBuilder.buildDaoManager(reader);

Setelah kita melakukan langkah diatas, maka barulah kita dapat menggunakan MahasiswaDao dan MahasiswaDaoImpl yang telah kita daftarkan pada file dao.xml . Sedangkan dibawah ini adalah contoh lengkap bagaimana mencari data Mahasiswa berdasarkan nomor nim yang diinputkan dengan menggunakan iBATIS DAO Framework.

private void btnCariActionPerformed(java.awt.event.ActionEvent evt) {   Reader reader = null;   DaoManager daoManager;   MahasiswaDao mhsDao;           final int intNim = ((Number)txtField.getValue()).intValue();   try {      reader = Resources.getResourceAsReader("latihanibatis/dao/dao.xml");   } catch (IOException ex) {      ex.printStackTrace();   }   daoManager = DaoManagerBuilder.buildDaoManager(reader);   mhsDao = (MahasiswaDao)daoManager.getDao(MahasiswaDao.class);           final Mahasiswa mhsResult = mhsDao.selectMhsByNim(intNim);           if (mhsResult == null) {       JOptionPane.showMessageDialog(null, "NIM  Mahasiswa Belum Terpakai");   } else if (intNim == mhsResult.getNim()) {       JOptionPane.showMessageDialog(null, "NIM  Mahasiswa Sudah Terpakai");   }}

Page 17: Ibatis Swing

Setelah mengetahui bagaimana mengakses DAO-nya, maka tiba waktunya untuk mulai membuat sebuah tampilan menu atau form untuk aplikasinya. Langkah-langkah dalam pembuatan menu adalah sebagai berikut:

1. Klik kanan pada package ui pilih menu New > JFrame Form, kemudian pada tampilan berikutnya isikan FormMahasiswa pada Class Name kemudian tekan tombol finish. Jika tombol finish selesai ditekan maka pada NetBeans akan muncul sebuah JFrame kosong seperti pada gambar dibawah ini:

2. Setelah JFrame tampil seperti gambar diatas, tambahkan 1 JPanel dan beri warna putih untuk backgroundnya dan ganti nama variabelnya menjadi panelAtas seperti gambar berikut ini:

Untuk melangkah ke tahap selanjutnya, ekstraklah dahulu seluruh file gambar yang terdapat pada image.zip kedalam folder LatihanIbatis/src/latihanibatis/images.

Page 18: Ibatis Swing

3. Langkah selanjutnya adalah tambahkan 3 buah JLabel pada panelAtas dan ganti nama variabelnya menjadi lblStat1, lblSat2 dan lblIcon. Pada component lblIcon, set iconnya dengan gambar Mahasiswa.png sehingga tampilan panelAtas menjadi seperti gambar dibawah ini:

4. Setelah itu tambahkan beberapa Component JLabel, JTextField, JButton, JFormattedTextField dan JPanel pada JFrame sehingga tampilannya menjadi seperti gambar dibawah ini:

Page 19: Ibatis Swing

Catatan Component: – JLabel yang dipakai adalah: lblNim, lblNama, lblAlamat, lblKota dan

lblKeterangan.– JFormattedTextField digunakan untuk inputan NIM (txtNim).– Sedangkan untuk inputan nama, alamat, kota dan keterangan memakai

JTextField (txtNama, txtKota, txtAlamat, txtKeterangan).– Untuk Component JPanel, beri TitleBorder dengan title Data Mahasiswa.

Panel ini berfungsi untuk menampilkan Data Mahasiswa yang sudah tersimpan DataBase pada tabel.

1. Sekarang design Panel DataMahasiswanya dengan cara klik kanan pada Panel DataMahasiswa, kemudian pilih Design This Container. Kemudian tambahkan JTable pada Panel DataMahasiswa sehingga tampilannya menjadi seperti berikut:

Setelah menambahkan Component JTable pada Panel DataMahasiswa, sekarang buatlah TableModel untuk JTable diatas dengan cara klik kanan pada package ui, kemudian pilih New > Java Class. Isikan MhsTabelModel pada File Name kemudian klik tombol Finish. Setelah menekan tombol Finish, pastekan kode dibawah ini ke dalam file MhsTabelModel.java yang telah dibuat:

/* * MhsTabelModel.java * * Created on June 3, 2007, 2:46 AM * To change this template, choose Tools | Template Manager * and open the template in the editor. */

package latihanibatis.ui;

import java.util.Vector;import javax.swing.table.AbstractTableModel;import latihanibatis.domain.Mahasiswa;

Page 20: Ibatis Swing

public class MhsTabelModel extends AbstractTableModel {

    private static final int NIM        = 0;       private static final int NAMA       = 1;     private static final int ALAMAT     = 2;    private static final int KOTA       = 3;    private static final int KETERANGAN = 4;        private final Vector<Object> recordMhs;    private String[] headerTable;        private int indexBaris;        public MhsTabelModel(String[] titleTable) {        super();                setTableTitle(titleTable);        recordMhs = new Vector<Object>();    }        private void setTableTitle(String[] title) {        this.headerTable = title;    }        public int getRowCount() {        return recordMhs.size();    }        public int getColumnCount() {        return headerTable.length;    }        public Object getValueAt(int baris, int kolom) {        final Mahasiswa mhs = (Mahasiswa)recordMhs.get(baris);                switch(kolom) {            case NIM        : return mhs.getNim();            case NAMA       : return mhs.getNama();            case ALAMAT     : return mhs.getAlamat();            case KOTA       : return mhs.getKota();            case KETERANGAN : return mhs.getKeterangan();            default: return new Object();        }    }        public String getColumnName(final int kolom) {        return headerTable[kolom];    }          public void addMhs(final int nim, final String nama, final String alamat,        final String kota, final String ket) {                recordMhs.addElement(new Mahasiswa(nim, nama, alamat, kota, ket));         fireTableRowsInserted(recordMhs.size()­1, recordMhs.size()­1);    }        // Untuk update pada JTable    public void setBarisForUpdate(final int baris) {        this.indexBaris = baris;    

Page 21: Ibatis Swing

    }        // Untuk update pada JTable    public int getBarisForUpdate() {        return indexBaris;    }        public void updateMhs(final String nama, final String alamat, final String kota, final String ket, final int baris, final int kolom) {                final Mahasiswa mhs = (Mahasiswa) recordMhs.get(baris);                mhs.setNama(nama);        mhs.setAlamat(alamat);        mhs.setKota(kota);        mhs.setKeterangan(ket);                        // Beritahu listeners bahwa baris yg ada di[baris, kolom] berubahan.        fireTableRowsUpdated(baris, kolom);    }        public void hapusDasar(final int baris) {        recordMhs.removeElementAt(baris);                // Beritahu listeners klo baris yg ada di [baris, kolom] telah terhapus.        fireTableRowsDeleted(baris, baris);    }        public void clearTableModel() {        recordMhs.clear();                // refresh JTable.        fireTableDataChanged();    }}

Setelah menulis MhsTabelModel sekarang kembalilah ke Tab FormMahasiswa.java dan tambahkan kode dibawah ini pada konstruktor FormMahasiswa.java

        final String[] headerTabel = {            "NIM","Nama", "Alamat", "Kota", "Keterangan"        };        tabelModel = new MhsTabelModel(headerTabel);

Karena field tabelModel belum ada pada FormMahasiswa.java, maka NetBeans akan mengeluarkan sebuah peringatan seperti berikut:

Pilih saja Create field... supaya NetBeans membuatkan fieldnya untuk kita.

Page 22: Ibatis Swing

5. Setelah itu, pindahlah ke Design mode pada FormMahasiswa kemudian pada Inspector Window ekspand node PanelMahasiswa kemudian klik kanan pada JTable lalu pilihlah properties seperti gambar berikut:

Pada dialog JTable properties, pilihlah method model seperti gambar dibawah ini:

Kemudian pilih opsi User Code dan isikan tableModel pada text area seperti gambar berikut:

Agar JTable hanya melayani SINGLE_SELECTION saja dan kolom pada tabelnya tidak bisa dipindah-pindah, maka pada JTable properties pilihlah tab Code kemudian pilih Custom Creation Code seperti gambar dibawah ini:

Page 23: Ibatis Swing

Sedangkan pada Dialog Custom Creation Code, pastekan kode dibawah ini:new javax.swing.JTable();jTable1.getTableHeader().setReorderingAllowed(false);jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);

Setelah semua konfigurasi pada tabel selesai tambahkan 3 JButton yaitu btnEdit, btnDelete dan btnRefresh kemudian beri icon edit.gif untuk btnEdit, delete.gif untuk btnDelete dan refresh.gif untuk btnRefresh pada Panel DataMahasiswa tersebut hingga hasil akhirnya seperti gambar dibawah ini:

6. Agar tampilannya lebih menarik, buatlah 1 buah panel lagi yang berfungsi sebagai panel status dengan cara klik kanan pada package ui pilih menu New > JPanel Form, kemudian pada tampilan berikutnya isikan PanelStatus pada Class Name kemudian tekan tombol finish. Setelah itu tambahkan 2 buah JLabel dan 1 buah JSeparator dan edit hingga tampilannya seperti gambar dibawah ini:

Page 24: Ibatis Swing

7. Gantilah nama variabel untuk JLabel masing-masing menjadi lblIcon untuk Icon dan lblStatus untuk statusnya, kemudian pindahlah ke mode Source dan pastekan kode dibawah ini:

    public void setStatus(final String msg, final String errorType) {        if (errorType.equals("BANTUAN")) {            lblStatus.setText(msg);            lblIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/latihanibatis/images/tips.gif")));        } else if (errorType.equals("ERROR")) {            lblStatus.setText(msg);            lblIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/latihanibatis/images/error.gif")));        } else if (errorType.equals("SUKSES")) {            lblStatus.setText(msg);            lblIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/latihanibatis/images/ok.gif")));        }    }

Kode diatas berfungsi untuk menampilkan pesan beserta iconnya kepada user bahwa aksi yang sedang dilakukan itu benar, salah atau hanya sekedar info bantuan saja. Ada 3 mode pesan yang akan ditampilkan yaitu pesan error, pesan bantuan dan pesan sukses. Tampilan dari ketiga mode tersebut adalah sebagai berikut:

Setelah selesai kembalilah ke FormMahasiswa, kemudian pada pallete project ekspand node latihanibatis.ui kemudian pilih PanelStatus lalu drag ke dalam FormMahasiswa seperti gambar dibawah ini:

Page 25: Ibatis Swing

Hasil akhir dari FormMahasiswa yang akan digunakan adalah sebagai berikut:

8. Supaya lebih mudah membedakan antara textfield yang sedang menerima focus dan textfield yang tidak menerima focus, maka buatlah sebuah class lagi yang menangani focus pada JTextField yang bertugas untuk mengganti warna background textfield ketika menerima focus. Sekarang klik kanan pada package ui, kemudian pilih New > Java Class. Isikan ComponentFocus pada File Name kemudian klik tombol Finish. Setelah menekan tombol Finish, pastekan kode dibawah ini ke dalam file ComponentFocus.java yang telah dibuat:

/* * ComponentFocus.java * * Created on June 5, 2007, 4:00 AM * To change this template, choose Tools | Template Manager * and open the template in the editor. */

package latihanibatis.ui;

import java.awt.event.FocusEvent;import java.awt.event.FocusListener;import javax.swing.JComponent;

public class ComponentFocus implements FocusListener {

Page 26: Ibatis Swing

    private final JComponent comp;        /** Creates a new instance of ComponentFocus */    public ComponentFocus(JComponent prmComp) {        this.comp = prmComp;    }

    public void focusGained(FocusEvent e) {        comp.setBackground(new java.awt.Color(217, 229, 255));    }

    public void focusLost(FocusEvent e) {        comp.setBackground(new java.awt.Color(255, 255, 255));    }}

Setelah itu, sekarang pasang ke seluruh JTextField yang terdapat pada FormMahasiswa dengan cara tambahkan 1 method initComponentFocus di dalam konstruktor FormMahasiswa sebagai berikut:

/** Creates new form FormMahasiswa */    public FormMahasiswa() {        ...........        initComponentFocus();    }        private void initComponentFocus() {        txtAlamat.addFocusListener(new ComponentFocus(txtAlamat));        txtKeterangan.addFocusListener(new ComponentFocus(txtKeterangan));        txtKota.addFocusListener(new ComponentFocus(txtKota));        txtNIM.addFocusListener(new ComponentFocus(txtNIM));        txtNama.addFocusListener(new ComponentFocus(txtNama));    }

Sedangkan tampilan yang dihasilkan jika textfield menerima focus adalah seperti gambar dibawah ini:

9. Setelah semua selesai, sekarang coba tekan tombol F6 supaya NetBeans menjalankan project yang telah dibuat. Jika tidak ada pesan error, maka FormMahasiswa akan tampil seperti gambar dibawah ini:

Page 27: Ibatis Swing

Koq tabelnya masih kosong ? Gimana caranya supaya tabelnya terisi data Mahasiswa yang sudah tersimpan ? Supaya ketika dijalankan pertama kali tabelnya sudah terisi data Mahasiswa, caranya yaitu editlah file Main.java yang terdapat pada package latihanibatis menjadi seperti dibawah ini:

package latihanibatis;public class Main {        private static MhsTabelModel tabelModel;    private static Mahasiswa mhs;    private static Reader reader;    private static DaoManager daoManager;    private static MahasiswaDao mhsDao;

    /** Creates a new instance of Main */    public Main() {  }

    /**     * @param args the command line arguments     */    public static void main(String args[]) {        try {            reader = Resources.getResourceAsReader("latihanibatis/dao/dao.xml");        } catch (IOException ex) {            ex.printStackTrace();        }        daoManager = DaoManagerBuilder.buildDaoManager(reader);        mhsDao = (MahasiswaDao)daoManager.getDao(MahasiswaDao.class);

Page 28: Ibatis Swing

        final String[] headerTabel = {            "NIM","Nama", "Alamat", "Kota", "Keterangan"        };        tabelModel = new MhsTabelModel(headerTabel);        try {            final List dataMhs = mhsDao.selectAllMhs();                        if (dataMhs.size() <= 0) {                JOptionPane.showMessageDialog(null, "RECORD NOT FOUND !!!");            } else {                for (int i=0; i<dataMhs.size(); i++) {                    mhs = (Mahasiswa)dataMhs.get(i);                                        tabelModel.addMhs(mhs.getNim(), mhs.getNama(), mhs.getAlamat(),                        mhs.getKota(), mhs.getKeterangan());                    System.out.println(mhs.getNama());                    Thread.sleep(180);                }            }        } catch (InterruptedException e) {            // Null Exception        }        java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {                new FormMahasiswa(tabelModel, mhsDao).setVisible(true);            }        });    }}

Listing kode diatas akan mencoba mengambil data dari database dan menampungnya pada JList, jika tidak ada data maka tampilkan pesan RECORD NOT FOUND tetapi kalau ada masukkan hasil query tersebut ke dalam tabelModel kemudian kirimkan tabelModel tersebut beserta mhsDao ke class FormMahasiswa. Sedangkan pada FormMahasiswa, editlah konstruktornya menjadi seperti dibawah ini:

    /** Creates new form FormMahasiswa */    public FormMahasiswa(MhsTabelModel tabelModel, MahasiswaDao dao) {        this.tabelModel = tabelModel;;        this.mhsDao = dao;                initComponents();        initComponentFocus();    }

Sekarang coba jalankan lagi dengan menekan tombol F6, harusnya isi record dari tabel Mahasiswa sudah bisa tampil pada FormMahasiswa seperti gambar dibawah ini:

Page 29: Ibatis Swing

10.Sekarang yang terakhir adalah memasang ActionEvent pada setiap JButton yang terdapat pada FormMahasiswa tersebut. Buatlah 6 buah class pada package latihanibatis.ui.event yaitu BtnCari, BtnCekNim, BtnDelete, BtnEdit, BtnSimpan dan BtnUpdate. Kemudian pastekan kode-kode dibawah ini untuk tiap-tiap Button.

/* * btnSearch.java * * Created on June 23, 2007, 4:00 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */

package latihanibatis.ui.event;

............

............public class BtnCari extends AbstractAction {        public BtnCari(....) {                super();    }         public void actionPerformed(final ActionEvent evt) {        tableModel.clearTableModel();

Page 30: Ibatis Swing

        Mahasiswa mhs = new Mahasiswa();        Map<Object, Object> searchKeyword = new HashMap<Object, Object>();                try {            final int intNim = ((Number)txtNIM.getValue()).intValue();            final String nama = txtNama.getText().toUpperCase();            final String kota = txtKota.getText().toUpperCase();            final String alamat = txtAlamat.getText().toUpperCase();            final String keter  = txtKeterangan.getText().toUpperCase();                        searchKeyword.put("nim",  "%" + intNim + "%");            searchKeyword.put("nama",  "%" + nama + "%");            searchKeyword.put("kota",  "%" + kota + "%");            searchKeyword.put("alamat",  "%" + alamat + "%");            searchKeyword.put("keterangan",  "%" + keter + "%");                        final List searchResult = mhsDao.searchMhs(searchKeyword);            int i = 0;            for (i=0; i<searchResult.size(); i++) {                mhs = (Mahasiswa) searchResult.get(i);                                tableModel.addMhs(mhs.getNim(), mhs.getNama(), mhs.getAlamat(),                    mhs.getKota(), mhs.getKeterangan());            }                        status.setStatus("Ditemukan " + i + " Data Mahasiswa !!!", "SUKSES");                        // Clearing all textField            txtNIM.setValue(0);      txtNama.setText("");            txtKota.setText("");     txtAlamat.setText("");            txtKeterangan.setText("");                    } catch (DaoException excpt) {            System.out.println(excpt.getLocalizedMessage());            status.setStatus("Proses Pencarian Gagal !!!", "ERROR");        }    }}

Note: Kode lengkap untuk BtnSearch dapat dilihat pada sample.zip

/* * BtnCekNim.java * * Created on June 23, 2007, 7:50 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */

package latihanibatis.ui.event;

public class BtnCekNim extends AbstractAction {        public BtnCekNim(....) {                super();    }        public void actionPerformed(final ActionEvent evt) {

Page 31: Ibatis Swing

        comp.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));        final int intNim = ((Number)txtField.getValue()).intValue();                if (intNim <= 0) {            status.setStatus("Maap NIM Tidak Boleh Kurang Dari Sama Dengan NOL !!", "ERROR");            showDialog("Maap NIM Tidak Boleh Kurang Dari \nSama Dengan NOL !!", "ERROR");            comp.setCursor(Cursor.getDefaultCursor());                        txtField.selectAll();        } else {            final Mahasiswa mhsResult = mhsDao.selectMhsByNim(intNim);                        if (mhsResult == null) {                status.setStatus("NIM " + intNim +" Mahasiswa Belum Terpakai !!", "BANTUAN");                showDialog("NIM Mahasiswa : " + intNim + "\n Belum Terpakai !!", "BANTUAN");            } else if (intNim == mhsResult.getNim()) {                status.setStatus("NIM "+ intNim +" Mahasiswa Sudah Terpakai !!", "ERROR");                showDialog("NIM Mahasiswa : "+ intNim +" \n Sudah Terpakai !!", "ERROR");                txtField.selectAll();            }        }        comp.setCursor(Cursor.getDefaultCursor());    }        private void showDialog(final String msg, final String type) {        if (type.equals("ERROR")) {            JOptionPane.showMessageDialog(null, msg, "Error !!!",                JOptionPane.ERROR_MESSAGE);        } else {            JOptionPane.showMessageDialog(null, msg);        }    }}

Note: Kode lengkap untuk BtnCekNim dapat dilihat pada sample.zip

Page 32: Ibatis Swing

/* * BtnDelete.java * * Created on June 23, 2007, 4:01 AM * */

package latihanibatis.ui.event;

public class BtnDelete extends AbstractAction {        public BtnDelete(......) {    }        public void actionPerformed(final ActionEvent evt) {        final int baris  = tableMhs.getSelectedRow(); // dimulai dari 0        final int kolom  = tableMhs.getColumnCount(); // ambil smua jml kolom.        final int jmlBrs = tableMhs.getRowCount();    // dimulai dari 1                String isiTable = "";        int deleteNim = 0;        if (baris < 0 || baris >= jmlBrs) {            status.setStatus("Tidak Ada Data Yang Ingin Dihapus !!", "ERROR");             JOptionPane.showMessageDialog(null, "Tidak Ada Data Yang Ingin Dihapus !!");                        tableMhs.selectAll();        } else {            for (int i=baris; i == baris; i++) {                for (int j=0; j < kolom; j++) {                                        isiTable = tableModel.getValueAt(i,j).toString();                                        // Ambil NIM Mhs yg akan dihapus.                    if (j == 0)                        deleteNim = Integer.parseInt(isiTable);                } // end for j            } // end for i                        final int resultDelet = mhsDao.deleteMhs(deleteNim);                        if (resultDelet == 0) {                status.setStatus("Mahasiswa Dengan NIM " + deleteNim + " Gagal Dihapus !!", "ERROR");                JOptionPane.showMessageDialog(null, "Mahasiswa Dengan NIM :\n" +                    deleteNim + " Gagal Dihapus !!");            } else {                tableModel.hapusDasar(baris); // Delete on JTable                status.setStatus("Mahasiswa Dengan NIM " + deleteNim + " Berhasil Dihapus !!", "SUKSES");                JOptionPane.showMessageDialog(null, "Mahasiswa Dengan NIM :\n" + deleteNim + " Berhasil Dihapus !!");            }        }    }}

Note: Kode lengkap untuk BtnDelete dapat dilihat pada sample.zip

Page 33: Ibatis Swing

/* * BtnEdit.java * * Created on June 23, 2007, 4:02 AM */package latihanibatis.ui.event;

public class BtnEdit extends AbstractAction {        public BtnEdit(.....) {    }        public void actionPerformed(final ActionEvent e) {        final int baris  = tableMhs.getSelectedRow(); // dimulai dari 0        final int kolom  = tableMhs.getColumnCount(); // ambil smua jml kolom.        final int jmlBrs = tableMhs.getRowCount();    // dimulai dari 1                String isiTable = "";                if (baris < 0 || baris >= jmlBrs) {            status.setStatus("Tidak Ada Data Yang Ingin Di Edit !!", "ERROR");            JOptionPane.showMessageDialog(null, "Tidak Ada Data Yang Ingin Di Edit !!", "Error !!!", JOptionPane.ERROR_MESSAGE);            tableMhs.selectAll();        } else {            for (int i=baris; i == baris; i++) {                for (int j=0; j < kolom; j++) {                                        isiTable = tableModel.getValueAt(i,j).toString();                                        // Ambil NIM Mhs yg akan dihapus.                    if (j == 0)                        txtNIM.setValue(Integer.parseInt(isiTable));                                        if (j == 1)                        txtNama.setText(isiTable);                                        if (j == 2)                        txtKota.setText(isiTable);                    if (j == 3)                        txtAlamat.setText(isiTable);                                        if (j == 4)                        txtKeterangan.setText(isiTable);                } // end for j                tableModel.setBarisForUpdate(i);            } // end for i                        txtNIM.setEnabled(false);      btnCari.setEnabled(false);            btnSimpan.setEnabled(false);   btnEdit.setEnabled(false);            btnDelete.setEnabled(false);   btnUpdate.setEnabled(true);                        // Give focus to field nama            txtNama.requestFocusInWindow(); txtNama.selectAll();                        status.setStatus("Tekan Tombol Update Untuk Mengupdate Data !!", "BANTUAN");        } // end else    }}

Note: Kode lengkap untuk BtnEdit dapat dilihat pada sample.zip

Page 34: Ibatis Swing

/* * BtnSimpan.java * * Created on June 23, 2007, 4:00 AM * */

package latihanibatis.ui.event;

public class BtnSimpan extends AbstractAction {        public BtnSimpan(.....) {  }        public void actionPerformed(final ActionEvent e) {        Mahasiswa mhsBaru = new Mahasiswa();                final int intNim = ((Number)txtNIM.getValue()).intValue();        final String nama = txtNama.getText().toUpperCase();        final String kota = txtKota.getText().toUpperCase();        final String alamat = txtAlamat.getText().toUpperCase();        final String keter  = txtKeterangan.getText().toUpperCase();                try {            if (intNim <= 0 || nama.trim().length() <= 0 ||                kota.trim().length() <= 0 || alamat.trim().length() <= 0) {                status.setStatus("Maap Kolom Isian Bertanda * Tidak Boleh Kosong !!", "ERROR");            } else {                mhsBaru.setNim(intNim);                mhsBaru.setNama(nama);                mhsBaru.setKota(kota);                mhsBaru.setAlamat(alamat);                mhsBaru.setKeterangan(keter);                                // Save it to database                mhsDao.insertMhs(mhsBaru);                                // if done, give message to user and add into table.                tableModel.addMhs(intNim, nama, kota, alamat, keter);                                // Clearing all textField                txtNIM.setValue(0);    txtNama.setText("");                txtKota.setText("");   txtAlamat.setText("");                txtKeterangan.setText("");                                status.setStatus("Data Mahasiswa Berhasil Disimpan !!", "SUKSES");                JOptionPane.showMessageDialog(null, "Data Mhs Tersimpan !!");            }        } catch (Exception ecpt) {            status.setStatus("Data Mahasiswa Gagal Disimpan !!", "ERROR");        }    }}

Note: Kode lengkap untuk BtnSimpan dapat dilihat pada sample.zip

Page 35: Ibatis Swing

/* * BtnUpdate.java * * Created on June 23, 2007, 4:02 AM * */

package latihanibatis.ui.event;

public class BtnUpdate extends AbstractAction {        public BtnUpdate(....) {  }        public void actionPerformed(final ActionEvent evt) {        Map<Object, Object> prmUpdate = new HashMap<Object, Object>();                try {            final int intNim = ((Number)txtNIM.getValue()).intValue();            final String nama = txtNama.getText().toUpperCase();            final String kota = txtKota.getText().toUpperCase();            final String alamat = txtAlamat.getText().toUpperCase();            final String keter  = txtKeterangan.getText().toUpperCase();                        if (intNim <= 0 || nama.trim().length() <= 0 ||                kota.trim().length() <= 0 || alamat.trim().length() <= 0) {                status.setStatus("Maap Kolom Isian Bertanda * Tidak Boleh Kosong !!", "ERROR");            } else {                final int baris = tableModel.getBarisForUpdate();                final int kolom = table.getColumnCount();                                prmUpdate.put("newNama", nama);                prmUpdate.put("newKota", kota);                prmUpdate.put("newAlamat", alamat);                prmUpdate.put("newNote", keter);                prmUpdate.put("nim", intNim);                                // Update to DataBase                mhsDao.updateMhs(prmUpdate);                // Update on Table                tableModel.updateMhs(nama, alamat, kota, keter, baris, kolom);                                prmUpdate.clear();                                txtNIM.setEnabled(true);                txtNIM.setValue(0);          txtNama.setText("");                txtKota.setText("");         txtAlamat.setText("");                txtKeterangan.setText("");   btnCari.setEnabled(true);                 btnSimpan.setEnabled(true);  btnEdit.setEnabled(true);                btnDelete.setEnabled(true);  btnUpdate.setEnabled(false);                 status.setStatus("Data Mahasiswa Sudah Terupdate !!", "SUKSES");                            } // End else        } catch (Exception except) {            status.setStatus("Data Mahasiswa Gagal Ter­udpate !!", "ERROR");        }    }}

Note: Kode lengkap untuk BtnUpdate dapat dilihat pada sample.zip

Page 36: Ibatis Swing

Setelah melakukan langkah diatas, sekarang editlah konstruktor FormMahasiswa dan tambahkan 1 method yaitu initListener() untuk memasang semua Action ke Button, editlah FormMahasiswa seperti dibawah ini:

public class FormMahasiswa extends javax.swing.JFrame {        private MhsTabelModel tabelModel;    private MahasiswaDao mhsDao;

    /** Creates new form FormMahasiswa */    public FormMahasiswa(MhsTabelModel tabelModel, MahasiswaDao dao) {        this.tabelModel = tabelModel;;        this.mhsDao = dao;                initComponents();        initListener();        initComponentFocus();    }        private void initComponentFocus() { }        private void initListener() {        btnCekNim.addActionListener(new BtnCekNim(panelStatus1, txtNIM, this, mhsDao));                btnCari.addActionListener(new BtnCari(lblNIM, txtNIM, lblNama, txtNama,            lblKota, txtKota,  lblAlamat, txtAlamat, lblKeterangan, txtKeterangan, btnCekNim, btnCari, btnSimpan, panelStatus1, tabelModel, mhsDao));                btnUpdate.addActionListener(new BtnUpdate(txtNIM, txtNama, txtKota,            txtAlamat, txtKeterangan, panelStatus1, jTable1, tabelModel, btnCari,            btnUpdate, btnSimpan, btnEdit, btnDelete, mhsDao));                btnSimpan.addActionListener(new BtnSimpan(txtNIM, txtNama, txtKota,            txtAlamat, txtKeterangan, panelStatus1, tabelModel, btnCari, btnSimpan, btnEdit, btnDelete, mhsDao));                btnEdit.addActionListener(new BtnEdit(txtNIM, txtNama, txtKota, txtAlamat,            txtKeterangan, tabelModel, jTable1, panelStatus1, btnCari, btnUpdate,            btnSimpan, btnEdit, btnDelete));                btnDelete.addActionListener(new BtnDelete(tabelModel, panelStatus1,             jTable1, mhsDao));    }

   private void initComponents() { }

   .............   .............}

Sekarang coba jalankan lagi dengan menekan tombol F6, jika tidak ada pesan error pada waktu kompilasi maka Aplikasi Mahasiswa ini sudah jadi.

Page 37: Ibatis Swing

9. Supaya kelihatan sedikit lebih profesional, tambahkan sebuah SplashScreen pada aplikasi yang telah kita buat. Pembuatan SplashScreen ini memanfaatkan class SplashScreen yang terdapat pada JDK1.6 dan sekarang editlah class Main.java menjadi seperti berikut:

/* * Main.java * * Created on June 18, 2007, 7:10 AM */

package latihanibatis;

import com.ibatis.common.resources.Resources;import com.ibatis.dao.client.DaoManager;import com.ibatis.dao.client.DaoManagerBuilder;import java.awt.AlphaComposite;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics2D;import java.awt.SplashScreen;import java.awt.geom.Line2D;import java.io.IOException;import java.io.Reader;import java.util.List;import javax.swing.JOptionPane;import latihanibatis.dao.MahasiswaDao;import latihanibatis.domain.Mahasiswa;import latihanibatis.ui.FormMahasiswa;import latihanibatis.ui.MhsTabelModel;

/** * * @author javamaniac */public class Main {        private static MhsTabelModel tabelModel;    private static Mahasiswa mhs;    private static Reader reader;    private static DaoManager daoManager;    private static MahasiswaDao mhsDao;        /** Creates a new instance of Main */    public Main() {    }        /**     * Edit SplashScreen Sample from Java Tutorial, hard code to find     * coordinate posisition.     * See java tutorial at SplashScreen for more detail.     */    static void renderSplashFrame(final Graphics2D g, final int frame, final String msg) {        // Prepare color for line        final Color colorLine = new java.awt.Color(0, 0, 204);    

Page 38: Ibatis Swing

        g.setComposite(AlphaComposite.Clear);        g.fillRect(120,140,200,100); // Set tempat utk text        g.setPaintMode();        g.setColor(colorLine); // set warna utk line        // found at Java2D sample from jdk installation directory        g.setStroke(new BasicStroke(3, 1, BasicStroke.JOIN_MITER));        g.draw(new Line2D.Float(frame*5,177,0, 177)); // gambar line­nya.        g.setColor(Color.BLACK); // set Warna utk text.        g.drawString(msg, 124, 200); // Atur dimana posisi teks akan ditampilkan.    }        /**     * @param args the command line arguments     */    public static void main(String args[]) {        try {            reader = Resources.getResourceAsReader("latihanibatis/dao/dao.xml");        } catch (IOException ex) {            ex.printStackTrace();        }        daoManager = DaoManagerBuilder.buildDaoManager(reader);        mhsDao = (MahasiswaDao)daoManager.getDao(MahasiswaDao.class);                final SplashScreen splash = SplashScreen.getSplashScreen();        if (splash == null) {            System.out.println("SplashScreen.getSplashScreen() returned null");            return;        }                Graphics2D g = splash.createGraphics();        if (g == null) {            System.out.println("g is null");            return;        }                renderSplashFrame(g, 0, "Connecting to DataBase ...");        splash.update();        final String[] headerTabel = {            "NIM","Nama", "Alamat", "Kota", "Keterangan"        };        tabelModel = new MhsTabelModel(headerTabel);        try {            renderSplashFrame(g, 30, "Connecting to DataBase ...");            splash.update();            final List dataMhs = mhsDao.selectAllMhs();            Thread.sleep(180);                        if (dataMhs.size() <= 0) {                JOptionPane.showMessageDialog(null, "DataBase ERROR !!!");            } else {                renderSplashFrame(g, 50, "Fetching Data From DataBase ...");                splash.update();                Thread.sleep(1800);                for (int i=0; i<dataMhs.size(); i++) {                    mhs = (Mahasiswa)dataMhs.get(i);                    renderSplashFrame(g, 70+i, "Preparing User Interface ...");                    splash.update();                    tabelModel.addMhs(mhs.getNim(), mhs.getNama(), 

Page 39: Ibatis Swing

                        mhs.getKota(), mhs.getKeterangan());                    System.out.println(mhs.getNama());                    Thread.sleep(180);                }                renderSplashFrame(g, 100, "Loading User Interface ...");                splash.update();                Thread.sleep(100);            }        } catch (InterruptedException e) {            // Null Exception        }        splash.close(); // Closing SplashScreen and show up the Main Frame.        java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {                new FormMahasiswa(tabelModel, mhsDao).setVisible(true);            }        });    }}

Setelah mengedit file Main.java, sekarang waktunya untuk memilih gambar apa yang cocok digunakan sebagai Splash Screen. Sedangkan pada latihan ini, gambar yang akan digunakan sebagai Splash Screen yaitu Splash.gif yang terdapat pada folder images dan terlihat seperti dibawah ini:

Pada JDK1.6 kita dapat menampilkan SplashScreen dengan cara menambahkan argument ­splash: file_splashnya pada saat mengetikkan perintah java, dimana file_splash adalah gambar yang ingin dijadikan sebagai SplashScreen. Sedangkan cara menambahkan argument ­splash: file_splash pada NetBeans adalah sebagai berikut:

1. Klik kanan pada Root Node pada Pallete Project kemudian pilih properties seperti gambar dibawah ini:

Page 40: Ibatis Swing

2. Tunggu beberapa saat hingga Window Project Properties muncul, setelah itu pilih Run pada Panel Categories, dan isikan ­splash:src/latihanibatis/images/Splash.gif pada VM Option seperti gambar dibawah ini:

Page 41: Ibatis Swing

Setelah itu klik tombol OK untuk kembali ke Editor NetBeans dan tekanlah tombol F6 untuk mengetes SplashScreenya. Jika tidak ada masalah maka SplashScreenya akan tampil seperti gambar dibawah ini:

Referensi-referensi:

1. iBATIS SQLMap for Java Developer Guide. 2. iBATIS SQLMAP tutorial. 3. iBATIS DAO Tutorial .4. Improve persistence with Apache Derby and iBATIS, Part 1 : Initial

configuration, semantics, and a simple test5. Improve persistence with Apache Derby and iBATIS, Part 2 : Data definition in

Derby.6. Improve persistence with Apache Derby and iBATIS, Part 3 : Transactions,

caching, and dynamic SQL.