Nano'nun Günlüğü…

Ideallerimi gerceklestirmek icin arastiriyorum, Unutmamak icin yaziyorum!

  • Bulundugunuz Sayfa: 
  • Ana Sayfa
  • Data Access Object Pattern (DAO) ve UML Uygulamasi…

Data Access Object Pattern (DAO) ve UML Uygulamasi…

Gönderim Kasım 6th, 2011

Bircok programin var olma nedeni veriler uzerinde islem yapmak, verileri veritabanlarinda depolamak ve bu verileri tekrar edinmektir. Amac bu olunca, verilerin program tarafindan nasil veritabanlarina konuldugu ve tekrar edilnildigi onem kazanmaktadir. Data Access Objects(DAO) yardimi ile, kullanilan veritabanina erisim ve veri depolama, verilere erisebilme islemlerinin daha soyutlastirilarak, diger katmanlarin veritabanina olan bagimliliklari azaltilir. DAO ile diger katmanlar etkilenmede veritabani degistirilebilir. Kisacasi amac ; birbirini kullanan ama birbirine bagimliliklari cok az olan katmanlar olusturmak ve gerekli oldugu zaman bir katmani, diger katmanlar etkilemeden degistirebilmek olmalidir.

Peki DAO tasarim sablonlari ne zaman kullanilmalidir ?

– Veritabaninda yer alan verilere ulasmak icin DAO kullanilir.

– Verilere ulasmayi saglayan katman ile verileri kullanan katmanlar arasindaki bagimliligi azaltmak ve bu katmanlarin hangi veritabani tipinin kullanildigini bilmesine gerek kalmadan islem yapabilmelerini kolaylastirmak icin DAO kullanilir.

– Degisik tipte veritabani sistemlerine ayni metodlari kullanarak erisimi standart hale getirmek icin DAO kullanilir. Boylece veritabani operasyonlari icin kullanilan metodlar standart hale getirilmis olur ve tum sistem icinde tek metodlarla kullanilabilir.

Uygulama ;

 

 

 

 

 

 

 

Uygulamamiza gecmeden once ; Oncelikle veri tabani dosyamizi hazirliyoruz. Db’mizi access ile gerceklestiriyoruz.

 

 

 

 

 

Olusturulan projenin icerisinde data access layer’larimizin bulunacagi DAL isminde bir paket olusturuyoruz. Oncelik olarak baglanti ayarlarimizla ilgili kodlarin bulunacagi class’imizi yaziyoruz…

 

 

 

 

 

 

 

DAO.java Kaynak Kodu ;

package DAL;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class DAO
{
private String URL=”jdbc:odbc:Dao_Obs_Uygulamasi”;
private String DriverName=”sun.jdbc.odbc.JdbcOdbcDriver”;
Connection baglanti;
public DAO()
{
try
{
Class.forName(DriverName).newInstance();
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null,”Driverlar Yuklenemedi, Hata ; ” + e.getMessage());
}
}

public Connection baglanti() throws SQLException
{

this.baglanti=DriverManager.getConnection(URL);
return baglanti;
}
}

 

Uygulamamiz icin kullanacagimiz Kullanicilarimizin bilgileri icin olusturacagimiz degiskenlerin ve de getter/setter kodlarini barindirabilecegimiz sinifin kodlari ise soyledir.

Kullanici_Bilgileri.java Kaynak Kodu ;

package DAL;

public class Kullanici_Bilgileri
{
private int id;
private String adi;
private String sifre;
private int yetkiid;

public Kullanici_Bilgileri()
{
}
public Kullanici_Bilgileri(int id, String adi, String sifre, int yetkiid)
{
this.id = id;
this.adi = adi;
this.sifre = sifre;
this.yetkiid = yetkiid;
}
public String getAdi() {        return adi;    }
public void setAdi(String adi) {        this.adi = adi;    }
public int getId() {        return id;    }
public void setId(int id) {        this.id = id;    }
public String getSifre() {        return sifre;    }
public void setSifre(String sifre) {        this.sifre = sifre;    }
public int getYetkiid() {        return yetkiid;    }
public void setYetkiid(int yetkiid) {        this.yetkiid = yetkiid;    }
}

 

Son olarak DAL paketimiz icerisinde olusturmamiz gereken onemli sinifimiz ise sik sik kullanacagimiz metodlari olusturacagimiz BLL sinifimizdir. Burada kullanacagimiz select, update, delete, insert gibi onemli metodlari jFrame formumuzdan cagirabilmemiz icin gerekli baglanti ayarlarini ve bilgileri nasil aktaracagimizi belirliyoruz.

BLL.java Kaynak Kodu ;

package DAL;

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 javax.swing.JOptionPane;

public class BLL
{
Connection baglanti;
ResultSet res;
PreparedStatement prs;

public BLL()
{
try
{
DAO nesne=new DAO();
baglanti=nesne.baglanti();
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null,”BLL Katmanında bağlantı sorunlu…”);
}
}

public boolean INSERT(Kullanici_Bilgileri obje) throws SQLException
{
String sorgu=”Insert into giris(id,adi,sifre,yetkiid) values(?,?,?,?)”;
prs=baglanti.prepareStatement(sorgu);
prs.setInt(1, obje.getId());
prs.setString(2, obje.getAdi());
prs.setString(3, obje.getSifre());
prs.setInt(4, obje.getYetkiid());
return prs.execute();
}

public boolean DELETE(int id) throws SQLException
{
String sorgu=”Delete from giris where id=?”;
prs=baglanti.prepareStatement(sorgu);
prs.setInt(1, id);
return prs.execute();
}

public boolean UPDATE(Kullanici_Bilgileri obje) throws SQLException
{
String sorgu=”UPDATE giris set adi=?,sifre=?,yetkiid=? where id=?”;
prs=baglanti.prepareStatement(sorgu);
prs.setString(1, obje.getAdi());
prs.setString(2, obje.getSifre());
prs.setInt(3, obje.getYetkiid());
prs.setInt(4, obje.getId());
return prs.execute();
}

public Kullanici_Bilgileri SELECT(int id) throws SQLException
{
String sorgu=”SELECT * FROM giris WHERE id=?”;
prs=baglanti.prepareStatement(sorgu);
prs.setInt(1, id);
res=prs.executeQuery();
Kullanici_Bilgileri pb= new Kullanici_Bilgileri();
while(res.next())
{
pb.setId(res.getInt(“id”));
pb.setAdi(res.getString(“adi”));
pb.setSifre(res.getString(“sifre”));
pb.setYetkiid(res.getInt(“yetkiid”));
}
return pb;
}

public List<Kullanici_Bilgileri> FINDALL() throws SQLException
{
String sorgu=”SELECT * FROM giris”;
prs=baglanti.prepareStatement(sorgu);
res=prs.executeQuery();
List<Kullanici_Bilgileri> Liste = new ArrayList<Kullanici_Bilgileri>();
while(res.next())
{
Liste.add(new Kullanici_Bilgileri(res.getInt(“id”),res.getString(“adi”),res.getString(“sifre”),res.getInt(“yetkiid”)));
}
return Liste;
}
}

 

 

 

 

 

 

 

 

Ve son olarak artik jFrame’de formumuzu tasarliyoruz.

Formumuzda ki amac ;

Insert ile textfield’lara girilen bilgileri db’ye aktarmak.

Select ile vermis oldugumuz id no’su ile ilgili kisinin bilgilerini joptionpane in mesajbox’ini kullanarak goruntuleyebilmek.

Update butonumuz ile onceden girilmis bilgileri yeniden duzenlemek.

Delete komutu ile de vermis oldugumuz id no’suna gore kullanicinin butun bilgilerini siliyoruz.

SelectAll komutu ile db’de kayitli olan tum kullanicilari jList’de listelettiriyor ve ayni zamanda da jComboBox’in icerisine db’de ki kullanicilarin id no’larini aktariyoruz.

Getter butonu ile de jComboBox’dan secmis oldugumuz herhangi bir id no’ya ait tum bilgileri textfield’lara aktarmis oluyoruz.

Kullanici_Giris_Ekrani.java Kaynak Kodu ;

import DAL.BLL;
import DAL.Kullanici_Bilgileri;
import java.sql.SQLException;
import java.util.List;
import javax.swing.JOptionPane;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
Kullanici_Bilgileri pb=new Kullanici_Bilgileri();
pb.setId(Integer.valueOf(jTextField1.getText()));
pb.setAdi(jTextField2.getText());
pb.setSifre(jTextField3.getText());
pb.setYetkiid(Integer.valueOf(jTextField4.getText()));
BLL bll=new BLL();
try
{
bll.INSERT(pb);
JOptionPane.showMessageDialog(rootPane,”Sisteme Bir Kayit Eklenmistir…”);
}
catch (SQLException ex)
{
JOptionPane.showMessageDialog(rootPane,”Hata “+ex.getMessage());
}
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
Kullanici_Bilgileri pb= new Kullanici_Bilgileri();
BLL bll=new BLL();
try
{
pb=bll.SELECT(Integer.valueOf(jTextField1.getText()));
JOptionPane.showMessageDialog(rootPane, “id ” + pb.getId() + ” ” + “adi ” + pb.getAdi() + ” ” + “sifre ” +
pb.getSifre() + ” ” + “yetkiid ” + pb.getYetkiid());
}
catch (SQLException ex)
{
JOptionPane.showMessageDialog(rootPane, “Hata”+ex.getMessage());
}
}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
Kullanici_Bilgileri pb=new Kullanici_Bilgileri();
pb.setId(Integer.valueOf(jTextField1.getText()));
pb.setAdi(jTextField2.getText());
pb.setSifre(jTextField3.getText());
pb.setYetkiid(Integer.valueOf(jTextField4.getText()));
BLL bll=new BLL();
try
{
bll.UPDATE(pb);
JOptionPane.showMessageDialog(rootPane, “Kayit Basariyla Guncellenmistir…”);
}
catch (SQLException ex)
{
JOptionPane.showMessageDialog(rootPane, “hata “+ex.getMessage());
}
}

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
try
{
BLL bll= new BLL();
bll.DELETE(Integer.valueOf(jTextField1.getText()));
JOptionPane.showMessageDialog(rootPane, “Kayit Basariyla Silinmistir…”);
}
catch (SQLException ex)
{
JOptionPane.showMessageDialog(rootPane, “Hata”+ex.getMessage());
}
}

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
list1.clear();
jComboBox1.removeAllItems();
BLL bll=new BLL();
try {
List<Kullanici_Bilgileri>Liste=bll.FINDALL();
for(Kullanici_Bilgileri i: Liste)
{
list1.add(String.valueOf(i.getId()));
list1.add(i.getAdi());
list1.add(i.getSifre());
list1.add(String.valueOf(i.getYetkiid()));
list1.add(“———“);
jComboBox1.addItem(String.valueOf(i.getId()));
}
}
catch (SQLException ex)
{
}
}

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {
String id_no_al = jComboBox1.getModel().getSelectedItem().toString();
Kullanici_Bilgileri pb= new Kullanici_Bilgileri();
BLL bll=new BLL();
try
{
pb=bll.SELECT(Integer.valueOf(id_no_al));
jTextField1.setText(id_no_al);
jTextField2.setText(pb.getAdi());
jTextField3.setText(pb.getSifre());
jTextField4.setText(String.valueOf(pb.getYetkiid()));
}
catch (SQLException ex)
{
JOptionPane.showMessageDialog(rootPane, “Hata”+ex.getMessage());
}
}

UML (Unified Modeling Language)

Projemizi UML haline getirebilmemiz icin netbeans arayuzumuzun Reverse Engineer bolumunu kullaniyoruz.

Bunun icin olusturdugumuz projemizin uzerinde sag click ile Reverse Engineer… kismi tikliyoruz ve karsimiza gelen pencere de asagida ki gibi bilgileri dolduraran next butonunu tiklayabilir ve uml projenizi olusturabilirsiniz…

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ok tusuna bastiktan sonra OutPut penceremizde Reverse Engineering Log file’da uml projemizin olusturulup olusturulmadigini anlayabiliriz.

 

 

 

 

 

 

Olusturulan uml projesinde diagrams kisminda sag click yardimiyla yeni bir diagram olustururuz…

 

 

 

Ve Class diagrami secerek yeni bir diagram olusturmus oluruz.

 

 

 

 

 

 

 

 

 

 

 

 

Olusturdugumuz class diagram’in icerisine paketlerimizi ve class’larimizi yerlestirebilmemiz icin DAL paketimizin icinde ki class’larimizi ve paketimi class diagramimizin icerisine surukleriz…

 

 

 

 

 

 

 

 

 

 

Ve sonuc olarak Class Diagram’in sonuc ekrani asagida ki gibidir…

 

 

 

 

 

 

 

 

 

 

Etiketler: , , , , , , , , , , , , , , , , , , , , , , ,
Bulundugu Konu Etiketleri Java, Yazilim |

Konu Ile Ilgili Yorumlar...

  1. Nano'nun Günlüğü… » Blog Archive » .NET Üç Katmanlı Mimari Dedi Ki... :
    Temmuz 28th, 2013 at 15:11

    […] getirmeye calismistik. Bunu, Data Access Object Pattern (DAO) ve UML Uygulamasi isimli makalenin http://www.sevdanurgenc.com/archives/1209 linkinden isterseniz tekrar inceleyebilirsiniz. Cok fazla bir farklilik olmadan .Net uzerinde isler […]

Lutfen Yorumlarinizi Burdan Ulastiriniz!...

You must be Kullanici Adiniz : to post a comment.

Istatistik

  • 1 Uye
  • 334 Yazi
  • 16 Yorum Var