Database in Java with Data Access Object and Entity Class

Assalammu’alaikum :D/

Kali ini saya akan share mengenai bagaimana membuat aplikasi dengan database di Java. Pengalaman saya membaca buku-buku pemrograman java yang ada di toko buku biasanya berisi mengenai pemrograman java hingga bikin aplikasi java dengan database hanya saja cara atau teknik yang ada masih kurang efisien dan efektif, kenapa cara yang digunakan biasanya adalah :

1. Registrasi Driver JDBC atau ODBC

2. buat koneksi dari Driver Manager

3. buat statement dan query-nya

4. eksekusi query

5. jika terdapat return value maka return value nya di simpan ke dalam array object tertentu atau mungkin kelas Object tersendiri,

step-step tersebut biasanya dilakukan setiap ketika kita ingin menginput data atau mengambil data (CRUD = Create Read Update Delete), sayangnya dalam beberapa contoh buku berbahasa indonesia yang dijual di toko buku itu kegiatan dari nomor 1 hingga 5 tersebut dilakukan di setiap event yang di membutuhkan kegiatan transaksi data, misalkan ketika tombol/button “insert” maka di buat step 2 atau 3 hingga step 5, dan ketika bertemu kembali dengan button “edit” atau “update” baru dibuat kembali langkah 3 hingga ke 5, dan ketika ingin mencari data atau mengambil semua data kembali memanggil step 3 hingga step 5, sehingga disini terlihat seperti ada redudansi atau pengulangan penulisan code untuk beberapa proses yang sebenarnya mirip atau malah sama.

Dengan cara yang akan saya coba share ini mungkin akan sangat berbeda, dan ketika kita sudah mempersiapkan class-class untuk mengurus management transaksi data maka akan terlihat jauh lebih sederhana dan lebih efektif juga efisien dan kita akan memanfaatkan yang namanya POJO (Plain Old Java Object) dan biasanya syarat yang harus dimiliki untuk kelas-kelas POJO adalah sebagai berikut:

1. Punya constructor default, constructor yang tidak mempunyai parameter.
2. Semua field yang bisa diakses dilengkapi dengan getter dan setter method.

Setelah itu kita akan menerapkan teknik ORM, walaupun dalam sample nanti tidak akan terlalu terlihat, karena hanya akan ada satu table sebagai contoh. Sebenarnya ada juga cara lain dengan memanfaatkan teknologi lain seperti framework-framework yang berfungsi untuk memanage data trasaction, seperti hibernate , spring, JPA eclipse link yang mempermudah kita untuk membangun Object Relational Mapping.

Untuk sample saya akan membuat 3 class: 1 class utama (main class untuk mencoba running class entitas dan data access object yang kita buat), 1 class entitas, 1 class Data Access Obeject.

dan berikut adalah class diagram yang di buat :

class MahasiswaEntity merupakan kelas entitas atau model yang merupakan representasi dari table yang ada dalama database. Fungsi dari Class MahasiswaEntity adalah untuk menampung nilai-nilai. Sedang MahasiswaDao adalah kelas yang berisi perintah-peruntah untuk  mengeksekusi perintah CRUD atau SQL lainnya.

Pertama kita buat database mahasiswa dan buat 1 table di dalamnya berama `mhs` dengan detail sebagai berikut :

Untuk sample database di java, buat project baru, lalu klik kanan project-> lalu properties->libraries->di tab compile->add library->pilih MySQL JDBC Driver->add library->ok

Berikut adalah Script yang saya buat :

Untuk Class MahasiswaEntity saya beri nama dengan “Mahasiswa” saja.

<br />
/*<br />
 * To change this template, choose Tools | Templates<br />
 * and open the template in the editor.<br />
 */<br />
package codelab.latihan.database.entitas;</p>
<p>import java.util.Date;</p>
<p>/**<br />
 *<br />
 * @author hendri<br />
 */<br />
public class Mahasiswa {</p>
<p>    private String nim;<br />
    private String nama;<br />
    private String alamat;<br />
    private Date tanggalLahir;</p>
<p>    public String getAlamat() {<br />
        return alamat;<br />
    }</p>
<p>    public void setAlamat(String alamat) {<br />
        this.alamat = alamat;<br />
    }</p>
<p>    public String getNama() {<br />
        return nama;<br />
    }</p>
<p>    public void setNama(String nama) {<br />
        this.nama = nama;<br />
    }</p>
<p>    public String getNim() {<br />
        return nim;<br />
    }</p>
<p>    public void setNim(String nim) {<br />
        this.nim = nim;<br />
    }</p>
<p>    public Date getTanggalLahir() {<br />
        return tanggalLahir;<br />
    }</p>
<p>    public void setTanggalLahir(Date tanggalLahir) {<br />
        this.tanggalLahir = tanggalLahir;<br />
    }</p>
<p>}<br />

Berikut untuk Class Data Access Object yang saya buat untuk class MahasiswaDao :

<br />
/*<br />
 * To change this template, choose Tools | Templates<br />
 * and open the template in the editor.<br />
 */<br />
package codelab.latihan.database.dao;</p>
<p>import codelab.latihan.database.entitas.Mahasiswa;<br />
import com.mysql.jdbc.Driver;<br />
import java.sql.Connection;<br />
import java.sql.Date;<br />
import java.sql.DriverManager;<br />
import java.sql.PreparedStatement;<br />
import java.sql.ResultSet;<br />
import java.sql.SQLException;<br />
import java.sql.Statement;<br />
import java.util.ArrayList;<br />
import java.util.List;<br />
import java.util.logging.Level;<br />
import java.util.logging.Logger;</p>
<p>/**<br />
 *<br />
 * @author hendri<br />
 */<br />
public class MahasiswaDao {</p>
<p>    private Connection connection;<br />
    private String insert = &quot;insert into mhs(nim,nama,alamat,tgl_lahir)&quot;<br />
            + &quot; values(?,?,?,?)&quot;;<br />
    private String selectAll = &quot;select * from mhs&quot;;<br />
    private String update = &quot;update mhs set nama=?, alamat=?,tgl_lahir=?&quot;<br />
            + &quot; where nim=?&quot;;<br />
    private String delete = &quot;delete from mhs where nim=?&quot;;<br />
    private String search = &quot;select * from mhs where nim=?&quot;;</p>
<p>    public MahasiswaDao() {<br />
        try {<br />
            this.connection = DriverManager.getConnection(&quot;jdbc:mysql://localhost:3306/mahasiswa&quot;,<br />
                    &quot;root&quot;, &quot;rahasia&quot;);<br />
        } catch (SQLException ex) {<br />
            ex.printStackTrace();<br />
        }</p>
<p>    }</p>
<p>    public void insertMahasiswa(Mahasiswa mahasiswa) {<br />
        PreparedStatement insertStatement = null;<br />
        try {<br />
            insertStatement = connection.prepareStatement(insert);</p>
<p>            insertStatement.setString(1, mahasiswa.getNim());<br />
            insertStatement.setString(2, mahasiswa.getNama());<br />
            insertStatement.setString(3, mahasiswa.getAlamat());</p>
<p>            Date date = new Date(mahasiswa.getTanggalLahir().getYear(),<br />
                    mahasiswa.getTanggalLahir().getMonth(),<br />
                    mahasiswa.getTanggalLahir().getDay());<br />
            insertStatement.setDate(4, date);</p>
<p>            insertStatement.executeUpdate();</p>
<p>        } catch (SQLException ex) {<br />
            ex.printStackTrace();<br />
        }</p>
<p>    }</p>
<p>    public void updateMahasiswa(Mahasiswa mahasiswa) {<br />
        PreparedStatement updateStatement = null;<br />
        try {<br />
            updateStatement = connection.prepareStatement(update);</p>
<p>            updateStatement.setString(1, mahasiswa.getNama());<br />
            updateStatement.setString(2, mahasiswa.getAlamat());<br />
            Date date = new Date(mahasiswa.getTanggalLahir().getYear(),<br />
                    mahasiswa.getTanggalLahir().getMonth(),<br />
                    mahasiswa.getTanggalLahir().getDay());<br />
            updateStatement.setDate(3, date);<br />
            updateStatement.setString(4, mahasiswa.getNim());</p>
<p>            updateStatement.executeUpdate();</p>
<p>        } catch (SQLException ex) {<br />
            ex.printStackTrace();<br />
        }<br />
    }</p>
<p>    public void deleteMahasiswa(Mahasiswa mahasiswa) {<br />
        PreparedStatement deleteStatement = null;<br />
        try {<br />
            deleteStatement = connection.prepareStatement(delete);</p>
<p>            deleteStatement.setString(1, mahasiswa.getNim());</p>
<p>            deleteStatement.executeUpdate();</p>
<p>        } catch (SQLException ex) {<br />
            ex.printStackTrace();<br />
        }<br />
    }</p>
<p>    public List selectAll() {<br />
        Statement selectAllStatement = null;<br />
        List listMahasiswa = new ArrayList();</p>
<p>        try {<br />
            selectAllStatement = connection.createStatement();</p>
<p>            ResultSet rs = selectAllStatement.executeQuery(selectAll);<br />
            while (rs.next()) {<br />
                Mahasiswa mahasiswa = new Mahasiswa();<br />
                mahasiswa.setNim(rs.getString(&quot;nim&quot;));<br />
                mahasiswa.setNama(rs.getString(&quot;nama&quot;));<br />
                mahasiswa.setAlamat(rs.getString(&quot;alamat&quot;));<br />
                Date tanggal = rs.getDate(&quot;tgl_lahir&quot;);<br />
                java.util.Date date = new java.util.Date(tanggal.getYear(),<br />
                        tanggal.getMonth(), tanggal.getDay());<br />
                mahasiswa.setTanggalLahir(date);</p>
<p>                listMahasiswa.add(mahasiswa);<br />
            }</p>
<p>        } catch (SQLException ex) {<br />
            ex.printStackTrace();<br />
        }</p>
<p>        return listMahasiswa;</p>
<p>    }</p>
<p>    public Mahasiswa searchMahasiswa(Mahasiswa mahasiswa) {<br />
        PreparedStatement searchStatement = null;<br />
        Mahasiswa found = new Mahasiswa();<br />
        try {<br />
            searchStatement = connection.prepareStatement(search);<br />
            searchStatement.setString(1, mahasiswa.getNim());<br />
            ResultSet rs = searchStatement.executeQuery();</p>
<p>            rs.next();<br />
            found.setNim(rs.getString(&quot;nim&quot;));<br />
            found.setNama(rs.getString(&quot;nama&quot;));<br />
            found.setAlamat(rs.getString(&quot;alamat&quot;));</p>
<p>            Date tanggal = rs.getDate(&quot;tgl_lahir&quot;);<br />
            java.util.Date date = new java.util.Date(tanggal.getYear(),<br />
                    tanggal.getMonth(), tanggal.getDay());<br />
            found.setTanggalLahir(date);</p>
<p>        } catch (SQLException ex) {<br />
            ex.printStackTrace();</p>
<p>        }<br />
        return found;</p>
<p>    }<br />
}<br />

Dan berikut adalah kelas Main yang saya buat untuk me-running sample 2 kelas di atas dan cara penggunaan entitas juga Dao nya :

<br />
/*<br />
 * To change this template, choose Tools | Templates<br />
 * and open the template in the editor.<br />
 */<br />
package codelab.latihan.database.main;</p>
<p>import codelab.latihan.database.dao.MahasiswaDao;<br />
import codelab.latihan.database.entitas.Mahasiswa;<br />
import com.mysql.jdbc.Driver;<br />
import java.sql.DriverManager;<br />
import java.sql.SQLException;<br />
import java.util.Date;<br />
import java.util.List;<br />
import java.util.logging.Level;<br />
import java.util.logging.Logger;</p>
<p>/**<br />
 *<br />
 * @author hendri<br />
 */<br />
public class Main {</p>
<p>    public static void main(String args[]) {<br />
        System.out.println(&quot;hello world&quot;);</p>
<p>        MahasiswaDao dao = new MahasiswaDao();<br />
        try {<br />
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());<br />
        } catch (SQLException ex) {<br />
            ex.printStackTrace();<br />
        }<br />
        //buat DAO nya<br />
        MahasiswaDao mhsDataAccess = new MahasiswaDao();</p>
<p>        //untuk proses insert data mahasiswa baru<br />
        Mahasiswa mahasiswaBaru = new Mahasiswa();<br />
        mahasiswaBaru.setNim(&quot;10107877&quot;);<br />
        mahasiswaBaru.setNama(&quot;checking&quot;);<br />
        mahasiswaBaru.setAlamat(&quot;Bandung&quot;);<br />
        mahasiswaBaru.setTanggalLahir(new Date(1989, 06, 22));</p>
<p>        mhsDataAccess.insertMahasiswa(mahasiswaBaru);</p>
<p>        /*<br />
        Mahasiswa mahasiswa = new Mahasiswa();</p>
<p>        mahasiswa.setNim(&quot;10107353&quot;);<br />
        mahasiswa.setNama(&quot;Tini&quot;);<br />
        mahasiswa.setAlamat(&quot;Cianjur&quot;);<br />
        mahasiswa.setTanggalLahir(new Date(1989, 03, 21));</p>
<p>        dao.insertMahasiswa(mahasiswa);</p>
<p>        Mahasiswa mahasiswa2 = new Mahasiswa();<br />
        mahasiswa2.setNim(&quot;10107333&quot;);<br />
        mahasiswa2.setNama(&quot;Ratih&quot;);<br />
        mahasiswa2.setAlamat(&quot;Cicalengka&quot;);<br />
        mahasiswa2.setTanggalLahir(new Date(1990, 02, 20));</p>
<p>        dao.insertMahasiswa(mahasiswa2);<br />
         */<br />
        //cara untuk update data mahasiswa<br />
        /*<br />
        Mahasiswa cari = new Mahasiswa();<br />
        cari.setNim(&quot;10107333&quot;);<br />
        cari.setNama(&quot;Jono&quot;);<br />
        cari.setAlamat(&quot;Jakarta&quot;);<br />
        cari.setTanggalLahir(new Date(1990, 02, 15));<br />
         */<br />
        //dao.updateMahasiswa(cari);</p>
<p>        //cara untuk melakukan pencari 1 mahasiswa berdasarkan NIM<br />
        /*<br />
        Mahasiswa search = new Mahasiswa();<br />
        search.setNim(&quot;10107352&quot;);</p>
<p>        Mahasiswa result = dao.searchMahasiswa(search);</p>
<p>        System.out.println(&quot;Nim : &quot; + result.getNim());<br />
        System.out.println(&quot;Nama : &quot; + result.getNama());<br />
        System.out.println(&quot;Alamat : &quot; + result.getAlamat());<br />
        System.out.println(&quot;Tanggal Lahir : &quot; + result.getTanggalLahir());<br />
         * */</p>
<p>//Cara melakukan delete mahasiswa<br />
//        Mahasiswa mahasiswaDelete = new Mahasiswa();<br />
//        mahasiswaDelete.setNim(&quot;10107333&quot;);<br />
//<br />
//        dao.deleteMahasiswa(mahasiswaDelete);<br />
//</p>
<p>// Cara untuk mengambil seluruh data mahasiswa</p>
<p>//        List result = dao.selectAll();<br />
//<br />
//<br />
//        for (Mahasiswa mhs : result) {<br />
//            System.out.println(&quot;Nim : &quot; + mhs.getNim());<br />
//            System.out.println(&quot;Nama : &quot; + mhs.getNama());<br />
//            System.out.println(&quot;Alamat : &quot; + mhs.getAlamat());<br />
//            System.out.println(&quot;Tanggal Lahir : &quot; + mhs.getTanggalLahir());<br />
//        }<br />
//                Mahasiswa mahasiswaDelete = new Mahasiswa();</p>
<p>//        mahasiswaDelete.setNim(&quot;10107333&quot;);<br />
//<br />
//        dao.deleteMahasiswa(mahasiswaDelete);<br />
//<br />
//        List result = dao.selectAll();<br />
//<br />
//<br />
//        for (Mahasiswa mhs : result) {<br />
//            System.out.println(&quot;Nim : &quot; + mhs.getNim());<br />
//            System.out.println(&quot;Nama : &quot; + mhs.getNama());<br />
//            System.out.println(&quot;Alamat : &quot; + mhs.getAlamat());<br />
//            System.out.println(&quot;Tanggal Lahir : &quot; + mhs.getTanggalLahir());<br />
//        }</p>
<p>    }<br />
}<br />

Berikut link untuk mendownload full source codenya (beserta mahasiswa.sql) :
https://github.com/situkangsayur/LatihanDatabase
untuk url git untuk clone source codenya :
git@github.com:situkangsayur/LatihanDatabase.git

Advertisements

One thought on “Database in Java with Data Access Object and Entity Class

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s