الاثنين، 15 يوليو 2024

Pemrograman Java Netbean IDE Konsep OOP DAO

Pemrograman Java Netbean IDE Konsep OOP DAO - tulisan ini hanya dokumentasi, dari apa yang saya pelajari tentang pemrograman java dengan netbean, jadul memang tapi itulah yang harus saya kerjakan saat ini. 

Tulisan Pemrograman Java Netbean IDE Konsep OOP DAO hanya catatan kecil bagaimana menginput satu nama siswa kedalam tbl_siswa, dilengkapi dengan file koneksi.php, Interface, model, dan view. Saya telah menerapkan pemrograman netbean gaya jadul dan ternyata itu merepotkan untuk skala yang lebih besar, kode tidak terstruktur dan memusingkan. 

Pada Directory project saya membuat package-package yang di khususkan untuk interface, model, view, dan implement seperti terlihat pada praktek pemrograman java netbean id konsep oop DAO saya berikut 


Agar saya mudah memahaminya, saya buatnya hanya dua field di table database yang diberi nama tbl_siswa, field id_siswa, dan fiel nama_siswa. 


Apa itu DAO 

DAO adalah singkatan dari Data Access Object, sebuah pola desain (design pattern) yang digunakan dalam pengembangan perangkat lunak untuk memisahkan logika bisnis atau aplikasi dari akses langsung ke data. Pola ini bertujuan untuk menciptakan abstraksi antara objek bisnis atau aplikasi dengan cara bagaimana data disimpan dan diakses dari database atau sumber data lainnya.

Tujuan dan Manfaat DAO

Abstraksi Koneksi Database: DAO memungkinkan aplikasi untuk berkomunikasi dengan database atau sumber data lainnya melalui operasi yang didefinisikan dalam DAO tanpa harus mengkhawatirkan detail koneksi dan komunikasi dengan database.

Memisahkan Logika Aplikasi: Dengan menggunakan DAO, logika bisnis atau aplikasi (seperti operasi CRUD - Create, Read, Update, Delete) dapat dipisahkan dari detail implementasi akses data. Hal ini memudahkan perawatan dan pengembangan aplikasi karena perubahan pada akses data tidak mempengaruhi logika bisnis secara langsung.

Meningkatkan Pengujian: DAO memfasilitasi pengujian unit yang lebih baik karena logika bisnis dapat diuji tanpa ketergantungan pada sumber data aktual. Anda dapat membuat mock atau stub objek DAO untuk menguji logika bisnis tanpa terhubung ke database sebenarnya.

Fleksibilitas dan Penggantian Sumber Data: Dengan menggunakan DAO, aplikasi dapat lebih fleksibel dalam mengubah atau mengganti sumber data. Misalnya, jika Anda memutuskan untuk beralih dari database relasional ke penyimpanan data NoSQL, Anda hanya perlu mengubah implementasi DAO tanpa mengubah logika aplikasi.

Komponen Utama DAO

Interface DAO: Mendefinisikan operasi umum yang dapat dilakukan pada objek data, seperti penyimpanan (insert), pengambilan (retrieve), update, dan penghapusan (delete).

Implementasi DAO: Kelas yang mengimplementasikan interface DAO dan bertanggung jawab untuk menjalankan operasi akses data sesuai dengan jenis sumber data yang digunakan (misalnya, database relasional, NoSQL, berkas teks, dll.).

Objek Bisnis: Objek atau model data yang direpresentasikan oleh aplikasi atau sistem. DAO bertanggung jawab untuk melakukan operasi CRUD pada objek-objek ini.

Contoh Penggunaan DAO

Misalkan Anda memiliki aplikasi manajemen siswa di sekolah. Anda dapat memiliki kelas Siswa sebagai objek bisnis yang memiliki atribut seperti nama, usia, dan kelas. DAO untuk kelas Siswa akan menyediakan operasi untuk menyimpan, mengambil, mengupdate, dan menghapus data siswa dari database. Dengan demikian, aplikasi tidak perlu mengetahui detail bagaimana koneksi ke database dilakukan atau bagaimana operasi SQL diimplementasikan, yang semuanya diurus oleh DAO.

Penggunaan pola DAO membantu meningkatkan struktur, fleksibilitas, dan perawatan dari aplikasi karena memisahkan logika bisnis dari detail implementasi akses data. Ini adalah prinsip dasar dalam desain perangkat lunak modern yang membantu dalam manajemen kompleksitas aplikasi dan memudahkan pengembangan serta pengujian.

berikut kode, kode dalam struktur yang saya sebutkan sebelumnya. 

file didalam direktory implement bernama SiswaDAOImpl.java berikut isinya 


package Implement;

import Interface.InterfaceSiswa;

import conf.koneksi;

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 java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.JOptionPane;

import model.modelSiswa;


public class SiswaDAOImpl implements InterfaceSiswa{

    private Connection conn=new koneksi().connect();

       


    @Override

    public void tambahSiswa(modelSiswa siswa) {

        

        

       try {

           String sql="INSERT INTO tbl_siswa (nama_siswa) values (?)";

           

           PreparedStatement st=conn.prepareStatement(sql);

           st.setString(1,siswa.getNamaSiswa());

           int rowTambah=st.executeUpdate();

                   if(rowTambah > 0){

                       System.out.println("Data Berhasil di tambah");

                   }

       }catch(Exception e){

           

       }

    }

     public void updateSiswa(modelSiswa siswa) {

        

        

       try {

           String sql="UPDATE tbl_siswa set nama_siswa=? where id_siswa=?";

           

           PreparedStatement st=conn.prepareStatement(sql);

           st.setString(1,siswa.getNamaSiswa());

           st.setInt(2, siswa.getIdSiswa());

           int rowTambah=st.executeUpdate();

                   if(rowTambah > 0){

                       System.out.println("Data Berhasil di tambah");

                   }

       }catch(Exception e){

           

       }

    }


    @Override

    public List<modelSiswa> getAllSiswa() {

        List<modelSiswa> daftarSiswa = new ArrayList<>();

        String sql = "SELECT * FROM tbl_siswa";

        try {

              java.sql.Statement st=conn.createStatement();

              ResultSet rs=st.executeQuery(sql); 


                while (rs.next()) 

                {

                    int idSiswa = rs.getInt("id_siswa");

                    String namaSiswa = rs.getString("nama_siswa");

                    modelSiswa siswa = new modelSiswa(idSiswa, namaSiswa);

                    daftarSiswa.add(siswa);

                }

            } catch (SQLException e) {

                e.printStackTrace();

        }

        return daftarSiswa;

        }


    @Override

    public void deleteSiswa(int idSiswa) {

        String sql = "DELETE FROM tbl_siswa WHERE id_siswa = ?";

        try (PreparedStatement st = conn.prepareStatement(sql)) {

            st.setInt(1, idSiswa);


            int rowsDeleted = st.executeUpdate();

            if (rowsDeleted > 0) {

                JOptionPane.showMessageDialog(null, "Data siswa berhasil dihapus.");

            }

        } catch (SQLException ex) {

            Logger.getLogger(SiswaDAOImpl.class.getName()).log(Level.SEVERE, null, ex);

        }

    }

}

    

File dalam package interface saya berinama interfaceSiswa.java, pembuatan file ini menggunakan java interface bukan java class berikut filenya. 

package Interface;

import java.util.List;
import model.modelSiswa;

/**
 *
 * @author HAPESINDO
 */
public interface InterfaceSiswa {
    void tambahSiswa(modelSiswa siswa);
    List<modelSiswa> getAllSiswa();
    void updateSiswa(modelSiswa siswa);
    void deleteSiswa(int idSiswa);
    
    
}

Direktory conf berisi file koneksi.java berikut kodenya

package conf;


import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class koneksi {
    private Connection koneksi;
    public Connection connect(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(koneksi.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        String url="jdbc:mysql://localhost:3306/sekolahxyz";
        try {
            koneksi=DriverManager.getConnection(url,"root","root");
        } catch (SQLException ex) {
            Logger.getLogger(koneksi.class.getName()).log(Level.SEVERE, null, ex);
        }
    return koneksi;
    }

    public PreparedStatement prepareStatement(String sql) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
   
    
}

kemudian ada file model, yang isinya modelSiswa.java 

package model;
public class modelSiswa {

    private int idSiswa;
    private String namaSiswa;
    
    public modelSiswa(int idSiswa, String namaSiswa){
        this.idSiswa=idSiswa;
        this.namaSiswa=namaSiswa;
    }
    
    public int getIdSiswa() {
        return idSiswa;
    }

    public void setIdSiswa(int idSiswa) {
        this.idSiswa = idSiswa;
    }

    public String getNamaSiswa() {
        return namaSiswa;
    }

    public void setNamaSiswa(String namaSiswa) {
        this.namaSiswa = namaSiswa;
    }

    
   
}

lalu ada file viewSiswa, bagian ini yang di tampilkan dilayar. 

package view;


import Implement.SiswaDAOImpl;

import Interface.InterfaceSiswa;

import conf.koneksi;

import java.sql.Connection;

import java.util.List;

import javax.swing.JOptionPane;

import javax.swing.table.DefaultTableModel;

import model.modelSiswa;


public class siswaView extends javax.swing.JFrame {

    private Connection conn=new koneksi().connect();

    private InterfaceSiswa intSiswa;

    private DefaultTableModel tblModel;


 public siswaView() {

        initComponents();

        intSiswa = new SiswaDAOImpl();

        tampilDataSiswa();

    }


 private void btnTambahSiswaActionPerformed(java.awt.event.ActionEvent evt) {                                               

       String nama_siswa=txtNamaSiswa.getText();

       modelSiswa msiswa = new modelSiswa(0, nama_siswa);

       intSiswa.tambahSiswa(msiswa);

       tampilDataSiswa();

    }   


    private void tblDataSiswaMouseClicked(java.awt.event.MouseEvent evt) {                                          

        int bar=tblDataSiswa.getSelectedRow();

        String a=tblModel.getValueAt(bar, 0).toString();

        String b=tblModel.getValueAt(bar, 1).toString();

        txtNamaSiswa.setText(b);

 

    }                                         


    private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {                                          

        int rowIndex = tblDataSiswa.getSelectedRow();

        if (rowIndex != -1) {

            int id = (int) tblDataSiswa.getValueAt(rowIndex, 0);

            String nama = txtNamaSiswa.getText();

            modelSiswa siswa = new modelSiswa(id, nama);

            intSiswa.updateSiswa(siswa);


            // Refresh data setelah update

            tampilDataSiswa();


            JOptionPane.showMessageDialog(this, "Data siswa berhasil diupdate.");

        } else {

            JOptionPane.showMessageDialog(this, "Pilih data siswa yang akan diupdate.");

        }

    }                                         


    private void btnHapusActionPerformed(java.awt.event.ActionEvent evt) {                                         

        int rowIndex = tblDataSiswa.getSelectedRow();

        if (rowIndex != -1) {

            int id = (int) tblDataSiswa.getValueAt(rowIndex, 0);

            intSiswa.deleteSiswa(id);


            // Refresh data setelah hapus

            tampilDataSiswa();


            JOptionPane.showMessageDialog(this, "Anda Yakin mau hapus.");

        } else {

            JOptionPane.showMessageDialog(this, "Pilih data siswa yang akan dihapus.");

        }

    }    


   private void tampilDataSiswa(){

        tblModel = new DefaultTableModel();

        tblModel.addColumn("ID");

        tblModel.addColumn("NAMA SISWA");

        List<modelSiswa> daftarSiswa=intSiswa.getAllSiswa();

         for (modelSiswa siswa : daftarSiswa) {

            tblModel.addRow(new Object[]{siswa.getIdSiswa(), siswa.getNamaSiswa()});

        }


        tblDataSiswa.setModel(tblModel);

    }  


code-code java netbean ide diatas yang tebal tulisannya merupakan code tambahan dari bawaannya, untuk frame saya gunakan 2 textfield, 1 textbox dan button seperti terlihat dalam code diatas.