Rabu, 30 Maret 2011

DAO (Data Acces Object)

Data Access Object (DAO) merupakan sebuah object yang menyediakan sebuah interface yang abstrak dimana ditujukan untuk aplikasi yang behubungan dengan database atau mekanisme dalam persistence. pada Data Access Object (DAO) menyediakan beberapa operasi yang spesifik tanpa memaparkan rincian database. Data Access Object (DAO) menyediakan operasi tertentu tanpa memaparkan rincian database. Memberikan pemetaan dari aplikasi ke database. Pada Data Access Object (DAO) menyediakan teknik yang memisahakan antara lapisan business dari persistence. Pola desain ini sangat banyak diterapkan pada bahasa pemograman java.
Data Access Object (DAO) menawarkan perangkat tambahan yang baik dalam proses pengembangan perangkat lunak. dengan memakai pola ini dapat memberikan ketahanan yang baik kepada aplikasi kita dan fleksibelitas terhadap perubahan. Keuntungan menggunakan Data Access Object (DAO) adalah relatif sederhana dan memisahkan proses yang terjadi pada aplikasi sehingga kode pada aplikasi menjadi lebih terstruktur dan mudah dipahami apabila terjadi kesalahan. dimana perubahan yang terjadi pada persitence logic tidak akan mempengaruhi DAO yang terdapat pada klien selama interface yang didefinisikan benar. DAO dapat di implementasikan pada berbagai macam framework seperti hibernet, JPA, dll.


Keuntungan Menggunakan Data Access Object (DAO):
Keuntungan utama menggunakan Data Access Object (DAO) yaitu sesuatu yang esensi untuk memecahkan program menjadi kelas-kelas kecil dimana masing-masing kelas tersebut saling berinteraksi denga kelas yang lainnya melalui Interface yang terdefinisi dengan benar. dengan menggunakan metode ini, kesalahan di suatu bagian program dapat dikoreksi tanpa perlu mempertimbangkan bagian-bagian lainya, serta bagian program dapat dipahami tanpa harus memahami keseluruhan. dengan menggunakan Data Access Object (DAO) kita dapat fokus pada pengorganisasian program sebagai kumpulan kelas yang terdefinisi dengan bagus. Data Access Object (DAO) berhubungan dengan pengabstraksian. masing-masing kelas berkorespondensi dengan satu abstraksi dan hanya satu-satunya. Dengan menggunakan Data Access Object (DAO) ini dapat membantu kita dalam membangun aplikasi yang komplek menjadi sederhana. seperti yang dikatakan oleh Myers:
“Suatu Aksi mempartisi program menjadi komponen-komponen individual dapat mereduksi kompleksitas.” selanjutnya


mari cekidot langsung aja kita praktekan...

1. pertama2 kita buat database belajar :
2. kemudian buat tabel mahasiswa

CREATE TABLE mahasiswa (
idmahasiswa INT NOT NULL AUTO_INCREMENT,
nama VARCHAR(40),
alamat VARCHAR(50),
institusi VARCHAR(40),
telepon VARCHAR(40),
email VARCHAR(30),
PRIMARY KEY (idmahasiswa));

3. Buat sebuah kelas Model dengan nama kelas Mahasiswa (Mahasiswa merupakan tabel yang ada pada Database belajar).


* "Blog : rizkionblog.blogspot.com"
* "Email : rizki.nugraha@sigma.co.id"
*/
package paket.java.dao.model;
/**
*
* @author Rizki Agung Nugraha
*/
public class Mahasiswa {
private int idmahasiswa;
private String nama;
private String alamat;
private String institusi;
private String telepon;
private String email;
public Mahasiswa() {
}

public Mahasiswa(int idmahasiswa, String nama, String alamat, String institusi, String telepon, String email) {
this.idmahasiswa = idmahasiswa;
this.nama = nama;
this.alamat = alamat;
this.institusi = institusi;
this.telepon = telepon;
this.email = email;
}

public String getAlamat() {
return alamat;
}

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

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public int getIdmahasiswa() {
return idmahasiswa;
}

public void setIdmahasiswa(int idmahasiswa) {
this.idmahasiswa = idmahasiswa;
}

public String getInstitusi() {
return institusi;
}

public void setInstitusi(String institusi) {
this.institusi = institusi;
}

public String getNama() {
return nama;
}

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

public String getTelepon() {
return telepon;
}

public void setTelepon(String telepon) {
this.telepon = telepon;
}
}


4. Kemudian buat kelas untuk koneksi Database
package paket.java.database.connection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;
/**
*
*
*/
public class KoneksiDatabase {
private Connection connection = null;
private static KoneksiDatabase koneksidatabase = null;
public KoneksiDatabase() {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (InstantiationException ex) {
JOptionPane.showMessageDialog(null, "Error Database 1: "+ex.getMessage(), "Database Error", JOptionPane.ERROR_MESSAGE);
} catch (IllegalAccessException ex) {
JOptionPane.showMessageDialog(null, "Error Database 2: "+ex.getMessage(), "Database Error", JOptionPane.ERROR_MESSAGE);
} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, "Error Database 3: "+ex.getMessage(), "Database Error", JOptionPane.ERROR_MESSAGE);
}
}

public static KoneksiDatabase getInstance() {
KoneksiDatabase conn = null;
try {
if (koneksidatabase == null) {
koneksidatabase = new KoneksiDatabase();
conn = koneksidatabase;
} else if (koneksidatabase.getConnection().isClosed()) {
koneksidatabase = new KoneksiDatabase();
conn = koneksidatabase;
} else {
conn = koneksidatabase;
}
return conn;
} catch (SQLException ex) {
return new KoneksiDatabase();
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null, "Error Exception : "+e, "Exception",JOptionPane.ERROR_MESSAGE);
return new KoneksiDatabase();
}
}
public Connection getConnection() {
try {
if (this.connection == null) {
this.connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/belajar", "root", "root");
this.connection.setAutoCommit(false);
}
return this.connection;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error Exception : "+e, "Exception",JOptionPane.ERROR_MESSAGE);
return null;
}

}

}


5. Buat sebuah Interface
package paket.java.dao.interfac;

import java.sql.SQLException;
import java.util.List;
import paket.java.dao.model.Mahasiswa;
/**
*
*
*/
public interface Interface {
public void insert(Mahasiswa mahasiswa) throws SQLException;
public void delete(int id_institusi) throws SQLException;
public void update(int oldid, Mahasiswa mahasiswa) throws SQLException;
public List getAll() throws SQLException;
}
Interface pada Data Access Object (DAO) mendefinisikan semua metode akses data Anda akan menyediakan objek. Untuk database, ini meliputi hal-hal seperti memasukkan, menghapus, memperbarui, dan mengambil baris. Karena ini adalah sebuah interface.

6. Buat kelas dimana kelas tersebut digunakan untuk melakukan operasi terhadap Database atau implementasi dari Data Access Object (DAO).


package paket.java.dao.perguruantinggi;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import paket.java.dao.interfac.Interface;
import paket.java.dao.model.Mahasiswa;
/**
*
*
*/
public class ImplementDao implements Interface {
private Connection conn;
private PreparedStatement st;

public ImplementDao(Connection connection) {
this.conn = connection;
}
public void insert(Mahasiswa mahasiswa) throws SQLException {
st = conn.prepareStatement("INSERT INTO mahasiswa (nama, alamat, institusi, telepon, email) VALUES (?,?,?,?,?)");
st.setString(1, mahasiswa.getNama());
st.setString(2, mahasiswa.getAlamat());
st.setString(3, mahasiswa.getInstitusi());
st.setString(4, mahasiswa.getTelepon());
st.setString(5, mahasiswa.getEmail());
st.executeUpdate();
conn.commit();
}
public void update(int oldid, Mahasiswa mahasiswa) throws SQLException {
st = conn.prepareStatement("UPDATE Mahasiswa SET nama=?,alamat=?,institusi=?,telepon=?,email=? WHERE idmahasiswa=?");
st.setString(1, mahasiswa.getNama());
st.setString(2, mahasiswa.getAlamat());
st.setString(3, mahasiswa.getInstitusi());
st.setString(4, mahasiswa.getTelepon());
st.setString(5, mahasiswa.getEmail());
st.setLong(6, oldid);
st.executeUpdate();
conn.commit();
}
public List getAll() throws SQLException {
List mahasiswa = new ArrayList();
st = conn.prepareStatement("SELECT * from Mahasiswa");
ResultSet rs = st.executeQuery();
while (rs.next()) {
Mahasiswa mahasiswa1 = new Mahasiswa();
mahasiswa1.setIdmahasiswa(rs.getInt(1));
mahasiswa1.setNama(rs.getString(2));
mahasiswa1.setAlamat(rs.getString(3));
mahasiswa1.setInstitusi(rs.getString(4));
mahasiswa1.setTelepon(rs.getString(5));
mahasiswa1.setEmail(rs.getString(6));
mahasiswa.add(mahasiswa1);
}
rs.close();
conn.commit();
return mahasiswa;
}
public void delete(int id_institusi) throws SQLException {
st = conn.prepareStatement("DELETE FROM Mahasiswa WHERE idmahasiswa =?");
st.setLong(1, id_institusi);
st.executeUpdate();
st.close();
conn.commit();
}
}


7. Buat sebuah form yang mana dalam form tersebut terdapat button insert, update, delete. dan kemudian tambahkan ActionListener pada pada button insert, update, delete. dan tambahkan kode seperti dibawah ini kedalam ActionListener pada setiap button
– ActionListener pada button Insert :


try {
Mahasiswa objmahasiswa = new Mahasiswa();
objmahasiswa.setNama(ovalTextField2.getText());
objmahasiswa.setAlamat(textAreaGlass1.getTextArea().getText());
objmahasiswa.setInstitusi((String)listGlass1.getList().getSelectedValue());
objmahasiswa.setTelepon(ovalTextField3.getText());
objmahasiswa.setEmail(ovalTextField4.getText());
KoneksiDatabase conn = KoneksiDatabase.getInstance();
ImplementDao dao = new ImplementDao(conn.getConnection());
dao.insert(objmahasiswa);
initTable();
}
catch (SQLException er)
{
System.out.println(er);
JOptionPane.showMessageDialog(this, "Error: " + er, "Error", JOptionPane.ERROR_MESSAGE);
}

– ActionListener pada button Update :

try {
Mahasiswa objmahasiswa = new Mahasiswa();
objmahasiswa.setNama(ovalTextField2.getText());
objmahasiswa.setAlamat(textAreaGlass1.getTextArea().getText());
objmahasiswa.setInstitusi((String)listGlass1.getList().getSelectedValue());
objmahasiswa.setTelepon(ovalTextField3.getText());
objmahasiswa.setEmail(ovalTextField4.getText());
KoneksiDatabase conn = KoneksiDatabase.getInstance();
ImplementDao dao = new ImplementDao(conn.getConnection());
dao.update(Integer.valueOf(id), objmahasiswa);
initTable();
}
catch (SQLException er)
{
JOptionPane.showMessageDialog(this, "Error: " + er, "Error", JOptionPane.ERROR_MESSAGE);
}

– ActionListener pada button Delete :

try {
KoneksiDatabase conn = KoneksiDatabase.getInstance();
ImplementDao dao = new ImplementDao(conn.getConnection());
dao.delete(Integer.valueOf(id));
initTable();
}
catch (SQLException er)
{
er.printStackTrace();
}

2 komentar:

Posting Komentar