Nesne tabanlı programla dilinde, database işlemlerini de nesne haline getirmek bizler için avantajlı olacaktır. Her bir tabloyu bir sınıfmış gibi kullanabilmek, programcıların işine gelir.Eğer böyle olursa, veritabanımızı farklı bir platforma taşımak istediğimizde, bu kısa sürede küçük bir değişiklik ile yapılabilir. Bunun en güzel örneği JPA ‘dır..

Bir JSF projesine, JPA ‘yı eklemek istediğimizde; projezimizin web content klasörünün altındaki web-inf ‘in altındaki libs’ klasörüne JPA jar’larını koymanız gerekmektedir. Bu jar’lar sayesinde projeniz jpa’yı tanır. (Bu jar’ları ve haklarındaki detaylı bilgiyi http://www.melihsakarya.com internet adresinden edinebilirsiniz.) Daha sonras proje içerisinde bir resoruce file (kaynak kod dosyası) eklemeniz gerekmektedir. Eclipse üzerinde çalışıyorsanız eğer, projenin üzerine sağ tıklamanız ve sonrasında new (yeni) sekmesinden resource ‘u seçmeniz ve sonrasında da ismini resources yapmanız gerekmekte. Bu dosyanın altına normal bir dosya da açmanız (folder) gerekiyor. Açtığınız son dosyanın (folder) ismi META-INF olmalıdır.. Daha sonra META-INF ‘in altında persistance.xml dosyası yaratmanız gerekmekte. Persistance.xml ‘de olması gerekli olan tagler..

  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <persistence version="1.0"
  4.  xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
  6. http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  7.  
  8. //bağlantıBir 'in anlamı, iki farklı veritabanına birden bağlanabileceğinizi göstermektedir.
  9.  <persistenceunit name="baglantiBir" transactiontype="RESOURCE_LOCAL">
  10.   <provider>org.hibernate.ejb.HibernatePersistence</provider>
  11.   <properties>
  12.                         //org.hibernate.dialect.MySQLDialect yazdığımız sınıfların mySql cümleciğine
  13.                         //dönüşeceğini betimler…
  14.    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
  15.    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
  16.    //veritabanımızın kullanıcı adı ve şifresi için gerekli olan kısım
  17.    <property name="hibernate.connection.username" value="root" />
  18.    <property name="hibernate.connection.password" value="" />
  19.    //veritabaninin ismiin yazılmasi gereken yer
  20.    <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/veritabani_ismi" />
  21.    <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
  22.    <property name="hibernate.hbm2ddl.auto" value="update" />
  23.    <property name="hibernate.show_sql" value="true" />
  24.    <property name="hibernate.format_sql" value="true" />
  25.    <property name="hibernate.connection.autocommit" value="true" />
  26.   </properties>
  27.  </persistenceunit>
  28.  
  29.  
  30. </persistence>

Projemizin artık JPA uyumlu. Şimdi yeni bir sınıf açıp, bu sınıfın isminin üzerine @Entity ifadesini yazdığımız zaman, o artık bizim bir database tablomuz gibi işleyecek. Örneğin ;

  1. package veritabani;
  2.  
  3. import javax.persistence.Entity;
  4. import javax.persistence.GeneratedValue;
  5. import javax.persistence.Id;
  6.  
  7. @Entity
  8. public class UlkeBilgi {
  9.  
  10.  @Id
  11.  @GeneratedValue
  12.  private Long ulkeId;
  13.  
  14.  private String ulkeAd;
  15.  
  16.  private String ulkeKod;
  17.  
  18.  public void setUlkeId(Long ulkeId) {
  19.   this.ulkeId = ulkeId;
  20.  }
  21.  
  22.  public Long getUlkeId() {
  23.   return ulkeId;
  24.  }
  25.  
  26.  public void setUlkeAd(String ulkeAd) {
  27.   this.ulkeAd = ulkeAd;
  28.  }
  29.  
  30.  public String getUlkeAd() {
  31.   return ulkeAd;
  32.  }
  33.  
  34.  public void setUlkeKod(String ulkeKod) {
  35.   this.ulkeKod = ulkeKod;
  36.  }
  37.  
  38.  public String getUlkeKod() {
  39.   return ulkeKod;
  40.  }
  41.  
  42. }

UlkeBilgi adında bir sınıf oluşturduk ve bu sınıfın üç değişkeni var. Birincisi ülkenin id’sini belirten long türündeki değişken, diğerleri ülke adı ve ülke kodu… Ve bu değişkenlerin getter ve setter methodları.. Artık bu sınıfımızı, veri tabanında bir tabloymuş gibi kullanabiliriz.

Managed Bean’deki UlkeBean sınıfımızın kodlarını yazıyorum..

  1.  
  2. package defaultPackage;
  3.  
  4. import java.util.List;
  5.  
  6. import javax.persistence.EntityManager;
  7. import veritabani.UlkeBilgi;
  8. import veritabani.EntityUtil;
  9.  
  10. public class UlkeBean {
  11.  
  12.  private UlkeBilgi ulkebilgi = new UlkeBilgi();
  13.  
  14.  public void duzenle() {
  15.   EntityManager em = EntityUtil.getEntityManager();
  16. //Transaction başlatılıyor ve ulkebilgi nesnesi transaction arasında düzenlenmekte.
  17. //eğer bir hata ile karşılaşılmaz ise, veritabanından gerekli değişiklik yapılacaktır.
  18.   em.getTransaction().begin();
  19.   em.merge(ulkebilgi);
  20.   em.getTransaction().commit();
  21.  
  22.   ulkebilgi = new UlkeBilgi();
  23.  }
  24.  
  25.  public void kaydet() {
  26.  
  27.   EntityManager em = EntityUtil.getEntityManager();
  28. //persist methodu, veritabanına nesnemizi kaydetmemizi sağlar.
  29. //kaydetme işleminde bir hata ile karşılmamız durumunda, işlemin
  30. //yarım kalmaması için Transaction arasına kaydetme methodumuzu yazmaktayız
  31.   em.getTransaction().begin();
  32.   em.persist(ulkebilgi);
  33.   em.getTransaction().commit();
  34.  
  35.   ulkebilgi = new UlkeBilgi();
  36.  }
  37.  
  38.  public void sil() {
  39.   System.out.println("girdi….");
  40.   EntityManager em = EntityUtil.getEntityManager();
  41. //remove, veritabanında ulkebilgi nesnesini silmemizi sağlar…
  42.   em.getTransaction().begin();
  43.   em.remove(ulkebilgi);
  44.   em.getTransaction().commit();
  45.  
  46.   ulkebilgi = new UlkeBilgi();
  47.  }
  48.  
  49.  @SuppressWarnings("unchecked")
  50.  public List<UlkeBilgi> getUlkeBilgiList() {
  51.  
  52.   EntityManager em = EntityUtil.getEntityManager();
  53.  
  54.   List<UlkeBilgi> liste = em.createQuery("from UlkeBilgi")
  55.     .getResultList();
  56.   return liste;
  57.  
  58.  }
  59.  
  60.  public void setUlkebilgi(UlkeBilgi ulkebilgi) {
  61.   this.ulkebilgi = ulkebilgi;
  62.  }
  63.  
  64.  public UlkeBilgi getUlkebilgi() {
  65.   return ulkebilgi;
  66.  }
  67.  
  68. }

Yukarıdaki kod, EntityManager ile ilgili, daha az kod yazmak için kısaltıldı. Yukarıdaki kod’u çalıştırabilmek için,

  1.  
  2. package veritabani;
  3.  
  4. import javax.persistence.EntityManager;
  5. import javax.persistence.EntityManagerFactory;
  6. import javax.persistence.Persistence;
  7.  
  8. public class EntityUtil {
  9.  private static EntityManagerFactory entityManagerFactory;
  10.  public static final ThreadLocal<EntityManager> threadLocal = new ThreadLocal<EntityManager>();
  11.  
  12.  public static EntityManagerFactory getEntityManagerFactory() {
  13.   if (entityManagerFactory == null) {
  14.    entityManagerFactory = Persistence
  15.      .createEntityManagerFactory("baglantiBir");
  16.   }
  17.   return entityManagerFactory;
  18.  }
  19.  
  20.  public static EntityManager getEntityManager() {
  21.   EntityManager entityManager = threadLocal.get();
  22.   if (entityManager == null) {
  23.    entityManager = getEntityManagerFactory().createEntityManager();
  24.    threadLocal.set(entityManager);
  25.   }
  26.   return entityManager;
  27.  }
  28. }

bu sınıfın da olması gerekmekte…

En son olarak da ön size hazırladığım ön yüz sayfasının içeriğini yazıyorum…

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3.       xmlns:h="http://java.sun.com/jsf/html"
  4.       xmlns:f="http://java.sun.com/jsf/core"
  5.       xmlns:ui="http://java.sun.com/jsf/facelets"
  6.       xmlns:rich="http://richfaces.org/rich">
  7.  
  8.  
  9.  <body>
  10.   <h:form>
  11.    <rich:panel>
  12.    <f:facet name="header">Ulke Bilgi</f:facet>
  13.     <h:panelGrid columns="2">
  14.      Ulke Adı : <h:inputText value="#{ulkeBean.ulkebilgi.ulkeAd}" /> <br />
  15.      Ulke Kodu : <h:inputText value="#{ulkeBean.ulkebilgi.ulkeKod}" /><br />
  16.      <h:commandButton action="#{ulkeBean.kaydet}" value="Kaydet" />
  17.      <h:commandButton action="#{ulkeBean.duzenle}" value="Duzenle" />
  18.     </h:panelGrid>
  19.    </rich:panel>
  20.   </h:form>
  21.  
  22.   <h:form>
  23.    <rich:dataTable value="#{ulkeBean.ulkeBilgiList}" var="list" width="600px">
  24.     <rich:column>
  25.       <f:facet name="header"> Düzenle </f:facet>
  26.      <h:commandLink value="Düzenle">
  27.       <f:setPropertyActionListener value="#{list}" target="#{ulkeBean.ulkebilgi}" />
  28.      </h:commandLink>
  29.      </rich:column>
  30.      <rich:column>
  31.       <f:facet name="header">Sil</f:facet>
  32.       <h:commandLink value="Sil" action="#{ulkeBean.sil}" >
  33.        <f:setPropertyActionListener value="#{list}" target="#{ulkeBean.ulkebilgi}"/>
  34.       </h:commandLink>
  35.      </rich:column>
  36.      <rich:column>
  37.       <f:facet name="header">Ulke Adı</f:facet>
  38.       #{list.ulkeAd}
  39.      </rich:column>
  40.      <rich:column>
  41.       <f:facet name="header">Ulke Kodu</f:facet>
  42.       #{list.ulkeKod}
  43.      </rich:column>
  44.    
  45.    
  46.    </rich:dataTable>
  47.   </h:form>
  48.  </body>
  49. </html>

Bu yazıyı beğendiniz mi ? :




*** *** Rica*** ***

Merhaba, cep telefonları için bir uygulama yazdım. Uygulamamın başarılı olması için onu android marketten indirir misiniz? Kesinlikle virüs ya da benzeri tehlikeler içermemektedir.
Aslında faydasız bir uygulama da değil. Allah korusun, acil durumlarda kan ararsanız eğer, şehre ve kan grubuna göre kan arama uygulaması. indirmek için lütfen : tıklayınız

*** *** Rica*** ***