Archive for the ‘ JPA(Java Persistence API), Hibernate ’ Category

JSF, PrimeFaces ve JPA kullanarak dynamic olarak bir tree view oluşturmaya çalıştım. Yani dynamic olarak oluşturulabilen bir kategori uygulaması yazmaya çalıştım. Bunun için en önemli kısım aşağıda yazılan recursive methodtur.
Recursive method

//Dynamic tree viewi olutruan method.
    public  void recursive(List<Kategoriler> liste, int id,TreeNode node){
            subList2=new ArrayList<Kategoriler>();
            subList2=subKategori(id);
          for(Kategoriler k:subList2){
            TreeNode childNode=new DefaultTreeNode(k.getKategoriAdi(), node);
//Veritabaninda kategori tablosunu tree view seklinde dynamic olarak olusturmayi saglar.
             recursive(subList2, k.getKategoriId(),childNode);
          }

Mesela örnekte donanım altına telefon ve onun da altına android kategorleri ekleyebilmek için recursive olarak yazmak gerekiyor.
Tek tablo ile bütün kategorileri tutuyorum. Aşağıdaki resimde görüldüğü gibi hangi kategoriye alt kategori ekliyorsam onun id sini alıyorum ve kat_ust_id olarak kaydediyorum. En temelde kategorler diye bir node oluşturdum ve onun ust id si 0 dır. Yani sağdaki hiç bir id ile aynı değil.

database table


Aşağıdaki şekilde de anlaşıldığı gibi önce bir ana kategori seçip ve alt kategori ismi girilerek istediğimiz kadar alt kategori girebiliriz.

Yukardaki örnekte üst kategori Donanım ve alt kategori de Telefon olarak oluşturuldu.

android


Parent node: Telefon child node: Android

Yukardaki işlemleri sağlayan jsf bean ve index.xhtml
JSF PrimeFaces Datatable Pagination Example
index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ul id="d">

        </ul>
        <h:form>
            <p:panel id="panelId">
                <p:tree value="#{nodeBean.root}" var="node" dynamic="true"
                        selectionMode="single" selection="#{nodeBean.selectedNode}">
                    <p:treeNode>
                        <h:outputText value="#{node}"/>
                    </p:treeNode>
                </p:tree>
                <h:panelGrid columns="2">
                    <h:outputLabel value="Alt kategori ismi*:"/>
                    <h:inputText id="id" value="#{nodeBean.kategIsmi}" required="true">
                        <f:validateLength minimum="1" maximum="30"/>
                    </h:inputText>
                    <p:commandButton value="Yeni Kategori Ekle" update="panelId" action="#{nodeBean.yeniKatEkle}" async="true"/>

                </h:panelGrid>
                <h:message for="id"/>
            </p:panel>
        </h:form>

        <h:form>
            <p:panel>
                <p:column>
                    <h:commandButton action="edit" value="Edit Sayfasina Gidin"/>
                </p:column>
            </p:panel>
        </h:form>

    </h:body>
</html>

NodeBean.java


package com.Bean;

import com.kategori.Kategoriler;
import com.kategori.KategorilerJpaController;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.primefaces.event.NodeSelectEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;


/**
 *
 * @author ubuntu
 */
public class NodeBean {

    private TreeNode root;
    private TreeNode donanim;
    private TreeNode selectedNode;
    private static  List<Kategoriler> liste;
    private static List<Kategoriler> araListe;
    private KategorilerJpaController katCont;
    private Kategoriler katNesnesi;
    private List<Kategoriler> subList2;
    private String kategIsmi;
    public NodeBean() {
        liste=new ArrayList<Kategoriler>();
        root=new DefaultTreeNode("Root",null);
        katCont=new KategorilerJpaController();
        liste=katCont.findKategorilerEntities();
        donanim=new DefaultTreeNode("", root);
//Butun kategorileri tutan bir ana kategori olusturuyor.
//Dynamic olarak sub kategori ekliyor. Recursive olarak hepsini kontrol edilmesi lazim.
        recursive(liste, 0,donanim);

    }
//Dynamic tree viewi olutruan method.
    public  void recursive(List<Kategoriler> liste, int id,TreeNode node){
            subList2=new ArrayList<Kategoriler>();
            subList2=subKategori(id);
          for(Kategoriler k:subList2){
            TreeNode childNode=new DefaultTreeNode(k.getKategoriAdi(), node);
//Veritabaninda kategori tablosunu tree view seklinde dynamic olarak olusturmayi saglar.
             recursive(subList2, k.getKategoriId(),childNode);
          }

    }
//herhangi bir tree nodenin childlarini buluyor.
    public static List<Kategoriler> subKategori(int i)
    {
        araListe=new ArrayList<Kategoriler>();
        for(Kategoriler k:getListe()){
            if(k.getKatUstId()==i){
                araListe.add(k);
            }
        }
        return araListe;
    }
    public static List<Kategoriler> getListe() {
        return liste;
    }
    public Kategoriler getKatNesnesi() {
        return katNesnesi;
    }
    public void setKatNesnesi(Kategoriler katNesnesi) {
        this.katNesnesi = katNesnesi;
    }
    public TreeNode getRoot() {
        return root;
    }
    
    public TreeNode getSelectedNode() {
        return selectedNode;
    }

    public void setSelectedNode(TreeNode selectedNode) {
        this.selectedNode = selectedNode;
    }
    public void secilenNode(NodeSelectEvent event){
        FacesMessage msg=new FacesMessage(FacesMessage.SEVERITY_INFO, "selected", event.getTreeNode().getData().toString());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
   
    public String getKategIsmi() {
        return kategIsmi;
    }

    public void setKategIsmi(String kategIsmi) {
        this.kategIsmi = kategIsmi;
    }


    public void yeniKatEkle(){
//        JOptionPane.showMessageDialog(null,katCont.kategoriIdDonder(getSelectedNode().getData().toString()).getKategoriId());
        katNesnesi=new Kategoriler(getKategIsmi(), katCont.kategoriIdDonder(getSelectedNode().getData().toString()).getKategoriId());
         katCont.create(katNesnesi);
         setKategIsmi(null);
    }
    
}

pagination

Edit.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <p:panel header="PrimeFaces ile listeleme">
                <p:dataTable value="#{editBean.allRecordList}" var="items" paginator="true"
                             rows="5" rowsPerPageTemplate="5,10,30"
                             paginatorTemplate="{FirstPageLink} {PageLinks} {NextPageLink}
                             {RowsPerPageDropdown}">
                    <p:column>
                        <f:facet name="header">Ad</f:facet>
                        <h:outputText value="#{items.kategoriAdi}"/>
                    </p:column>
                    <p:column>
                        <f:facet name="header">Ust Kategori Id</f:facet>
                        <h:outputText value="#{items.katUstId}"/>
                    </p:column>
                    <p:column>
                        <f:facet name="header">Edit</f:facet>
                        <h:outputLink value="EditComplete.xhtml">
                            <f:param name="id" value="#{items.kategoriId}"/>Düzenle
                        </h:outputLink>
                    </p:column>
                </p:dataTable>
                <h:outputLink value="index.xhtml">Ana Sayfa</h:outputLink>
            </p:panel>
        </h:form>
    </h:body>
</html>

EditBean.java

package com.Bean;

import com.kategori.Kategoriler;
import com.kategori.KategorilerJpaController;
import com.kategori.exceptions.NonexistentEntityException;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;


/**
 *
 * @author ubuntu
 */
public class EditBean {
    private KategorilerJpaController contObje;
    private Kategoriler kategoriObje;
    private List<Kategoriler> allRecordList;

    public List<Kategoriler> getAllRecordList() {
        return allRecordList;
    }
    public Kategoriler getKategoriObje() {
        return kategoriObje;
    }
    public void setKategoriObje(Kategoriler kategoriObje) {
        this.kategoriObje = kategoriObje;
    }
    public void setAllRecordList(List<Kategoriler> allRecordList) {
        this.allRecordList = allRecordList;
    }
    
    public EditBean() {
        contObje=new KategorilerJpaController();
        allRecordList=contObje.findKategorilerEntities();
        kategoriObje=new Kategoriler();
//Request nesnesi olusturup <h:outputLink> ile
//<f:param name="id" value="#{items.kategoriId}"/> degeri aliniyor
        FacesContext context=FacesContext.getCurrentInstance();
        HttpServletRequest request=(HttpServletRequest) context.getExternalContext().getRequest();
        if(request.getParameter("id")!=null){
            int katId=Integer.parseInt(request.getParameter("id"));
            kategoriObje=contObje.findKategoriler(katId);
        }
    }
    public void editCpmlete() throws NonexistentEntityException, Exception{
//<h:selectOneMenu value="#{editBean.kategoriObje.katUstId}"> ta ust kategori secilir ve
//<h:inputText value="#{editBean.kategoriObje.kategoriAdi}" required="true"/> alanina da kategori ismi duzenlenir
//secilen deger ve kategori adi edi() hazir medotu ile guncellenir bilgiler. Bu da kategorId primarykey iel guncellenir.
        contObje.edit(kategoriObje);
    }
//reset ile nesneye null deger atadim.
    public void reset(){
        getKategoriObje().setKatUstId(null);
        getKategoriObje().setKategoriAdi(null);
        getKategoriObje().setKategoriId(null);
    }
}

select menu

EditComplete.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h:form>
            <p:panel>
                <h:inputHidden value="#{editBean.kategoriObje.kategoriId}"/>
                <h:panelGrid columns="2" id="yenile">
                    <h:outputText value="Kategori Adi"/>
                    <h:inputText value="#{editBean.kategoriObje.kategoriAdi}" required="true"/>
                    <h:outputText value="Ust Kategori ID"/>
                    <h:selectOneMenu value="#{editBean.kategoriObje.katUstId}">
                        <f:selectItems value="#{editBean.allRecordList}" var="items"
                                       itemLabel="#{items.kategoriAdi}" itemValue="#{items.kategoriId}"/>
                    </h:selectOneMenu>
                    <h:commandButton value="Kaydet" action="#{editBean.editCpmlete}"/>
                    <p:commandButton value="Reset" action="#{editBean.reset}" update="yenile"/>
                </h:panelGrid>
            </p:panel>
            <p:button outcome="geri" value="Geri Don"/>
        </h:form>
    </h:body>
</html>

Kategoriler.java

package com.kategori;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author ubuntu
 */
@Entity
@Table(name = "kategoriler")
@NamedQueries({
    @NamedQuery(name = "Kategoriler.findAll", query = "SELECT k FROM Kategoriler k"),
    @NamedQuery(name = "Kategoriler.findByKategoriId", query = "SELECT k FROM Kategoriler k WHERE k.kategoriId = :kategoriId"),
    @NamedQuery(name = "Kategoriler.findByKategoriAdi", query = "SELECT k FROM Kategoriler k WHERE k.kategoriAdi = :kategoriAdi"),
    @NamedQuery(name = "Kategoriler.findByKatUstId", query = "SELECT k FROM Kategoriler k WHERE k.katUstId = :katUstId")})
public class Kategoriler implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "kategori_id")
    private Integer kategoriId;
    @Basic(optional = false)
    @Column(name = "kategori_adi")
    private String kategoriAdi;
    @Column(name = "kat_ust_id")
    private Integer katUstId;

    public Kategoriler() {
    }

    public Kategoriler(Integer kategoriId) {
        this.kategoriId = kategoriId;
    }

    public Kategoriler(String kategoriAdi) {
        this.kategoriAdi = kategoriAdi;
    }

    public Kategoriler(Integer kategoriId, String kategoriAdi) {
        this.kategoriId = kategoriId;
        this.kategoriAdi = kategoriAdi;
    }

    public Kategoriler(String kategoriAdi, Integer katUstId) {
        this.kategoriAdi = kategoriAdi;
        this.katUstId = katUstId;
    }

    public Integer getKategoriId() {
        return kategoriId;
    }

    public void setKategoriId(Integer kategoriId) {
        this.kategoriId = kategoriId;
    }

    public String getKategoriAdi() {
        return kategoriAdi;
    }

    public void setKategoriAdi(String kategoriAdi) {
        this.kategoriAdi = kategoriAdi;
    }

    public Integer getKatUstId() {
        return katUstId;
    }

    public void setKatUstId(Integer katUstId) {
        this.katUstId = katUstId;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (kategoriId != null ? kategoriId.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Kategoriler)) {
            return false;
        }
        Kategoriler other = (Kategoriler) object;
        if ((this.kategoriId == null && other.kategoriId != null) || (this.kategoriId != null && !this.kategoriId.equals(other.kategoriId))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.kategori.Kategoriler[kategoriId=" + kategoriId + "]";
    }

}

persistence


persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="KategorilerPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source/>
    <class>com.kategori.Kategoriler</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.connection.password" value="123"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/odev"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>

faces-config


faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>

<!-- =========== FULL CONFIGURATION FILE ================================== -->

<faces-config version="2.0"
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
    <navigation-rule>
        <from-view-id>/index.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>edit</from-outcome>
            <to-view-id>/Edit.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
    <managed-bean>
        <managed-bean-name>nodeBean</managed-bean-name>
        <managed-bean-class>com.Bean.NodeBean</managed-bean-class>

        <managed-bean-scope>request</managed-bean-scope></managed-bean>
    <managed-bean>
        <managed-bean-name>editBean</managed-bean-name>
        <managed-bean-class>com.Bean.EditBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
    <navigation-rule>
        <from-view-id>/EditComplete.xhtml</from-view-id>
        <navigation-case>
            <from-outcome>geri</from-outcome>
            <to-view-id>/Edit.xhtml</to-view-id>
        </navigation-case>
    </navigation-rule>
</faces-config>

Ben NetBeans 6.9.1 kullandığımdan PrimeFaces default olarak gelmiyor. Bunun için
1. primafaces-2.2.1.jar kütüphanesini ekledim
2. web-fragment.xml dosyasını oluşturdum. Aşağıda o dosya içeriği var.
3.

xmlns:p="http://primefaces.prime.com.tr/ui"

xml namespacesini ekledim.

web-fragment.xml

<web-fragment xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd"
	version="3.0">

	<name>PrimeFaces</name>

    <servlet>
		<servlet-name>PrimeFaces Resource Servlet</servlet-name>
		<servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>PrimeFaces Resource Servlet</servlet-name>
		<url-pattern>/primefaces_resource/*</url-pattern>
	</servlet-mapping>

</web-fragment>

Uygulamayi indirmek için tiklayin. Ubuntuda uygulamayı .zip haline getiriyorum. Eğer açamazsanız veya link bozuksa dm atabilirim.

Java Persistence API(JPA) ve Hibernate JSP Ajax ile veritabanında kayit ekleme, silme, listeleme işlemlerini yapmaya çalıştım. Bu örnekte sadece hibernate kullandım. JPA, Hibernate, ECB için güzel makaleyi okumanızı tavsiye ederim.
1. Ilk olaral bir Java Web Uygulamasını oluşturun.
2.Oluşturduğunuz uygulamayı sağ tıklayıp New –> Other –>Persistence –>Persistence Unit seçin ve Next buttonu tıklayın. Resimde 1,2,3 gibi yani oluşturma sırasını belirttim.

persistence


3. Persistance Library(Mesela Hibernate) kısmında kullanmak istediğinizi seçin. Hemen altında Database Connection(Hibernate için kullandığınız connection) seçin ve Finish buttonu tıklayın. Bu persistance.xml dosyasını oluşturuyor. İçine bakarsanız Hibernate’in veritabanı ile ilgili bağlanma bilgileri var. Eclipse’de bu META-INF klasörü altında oluşturulur.

persistence.xml


4.Yine uygulamanızı sağ tıklayıp New –> Other –> Persistence –> Entitiy Class From Dtabase seçip Next buttonu tıklayın. Bu adımda Entity Class’ı da seçebilirsiniz ama veritabanı içinde zaten var olan tablolarını çekip mapping yapmak bana daha kolay geliyor. Kendisi de database içinde tablo oluşturup mapping yapabilir.
Next buttonu tıklanınca aşağıdaki resimde görüldüğü gibi Database Connection hibernate için olanı seçince Available Tables kısmına var olan tablolarınız geliyor. Seçmek istediğinizi tıklayıp Add ile Selected Table alanına alıp Next buttonu tıklayın. Sonra bir Package alnına bir paket ismini yazıp Finish buttonu tıklayın. Örnekte kisi tablosu seçilmiş.

selected table


package


5.Persistence.xml Design dan Include All Entity Class… yazılan yerdeki kutucuğu tıklayıp ticki kaldırınca Add Class buttonu aktif oluyor. Buttonu tıklayıp eklemek istediğiniz entityi ekleyin. Örnekte ethem paketi altındaki Kisi.java sınıfını ekledim.

enetity


6.En önemli yere geldik. New –> Other –> Persistence –> JPA Controller Class From Entity Classes seçip Next buttonu tıklayıp Entity Classes kısmında Kisi.java sınıfını selected entity alanına alıp tekrar Next buttonu ile bir bir paket ismi verin veya var olan paketi seçin.
Dikkat edin verdiğiniz paketIsmi.exceptions altındaki sınıfları ve Verdiğiniz sınıfIsmi(örnekteki Kisi) KisiJpaController.java isminde bir sınıf oluşturuyor. Işte bu sınıf database ile ilgili crud(creat, read,update,delete) işlemlerini kendisi gerçekleştiriyor. Sadece metodlarını çağırmak kalıyor bize.

enetity from class


selected entitiy class



7.Index.jsp içinde ajax ile dropdown listede seçilen değere göre Islem.jsp de belirli işlemler yapıyor.
Aşağıda uygulamanın genel görünümü ve jpa ve hibernate ekli kütüphanelerin resimleri var.

Persistence.xml
5.adımda ethem.Kisi xml ekliyor.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="AjaxJpaListPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>ethem.Kisi</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.connection.password" value="123"/>
      <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/ethemsulan"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
  </persistence-unit>
</persistence>

Kisi.java
4.adımda oluşturulan entity

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ethem;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

/**
 *
 * @author ubuntu
 */
@Entity
@Table(name = "kisi")
@NamedQueries({
    @NamedQuery(name = "Kisi.findAll", query = "SELECT k FROM Kisi k"),
    @NamedQuery(name = "Kisi.findById", query = "SELECT k FROM Kisi k WHERE k.id = :id"),
    @NamedQuery(name = "Kisi.findByAd", query = "SELECT k FROM Kisi k WHERE k.ad = :ad"),
    @NamedQuery(name = "Kisi.findBySoyad", query = "SELECT k FROM Kisi k WHERE k.soyad = :soyad"),
    @NamedQuery(name = "Kisi.findByYas", query = "SELECT k FROM Kisi k WHERE k.yas = :yas")})
public class Kisi implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Column(name = "ad")
    private String ad;
    @Column(name = "soyad")
    private String soyad;
    @Column(name = "yas")
    private Integer yas;

    public Kisi() {
    }
//Bunu ben sağ tıklayıp insert code-->constructor ile yapiciyi ekledim.
//Diger hersey otomatik uretildi.
    public Kisi(String ad, String soyad, Integer yas) {
        this.ad = ad;
        this.soyad = soyad;
        this.yas = yas;
    }

    public Kisi(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getAd() {
        return ad;
    }

    public void setAd(String ad) {
        this.ad = ad;
    }

    public String getSoyad() {
        return soyad;
    }

    public void setSoyad(String soyad) {
        this.soyad = soyad;
    }

    public Integer getYas() {
        return yas;
    }

    public void setYas(Integer yas) {
        this.yas = yas;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Kisi)) {
            return false;
        }
        Kisi other = (Kisi) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "ethem.Kisi[id=" + id + "]";
    }

}

KisiJpaController.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ethem;

import ethem.exceptions.NonexistentEntityException;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;

/**
 *
 * @author ubuntu
 */
public class KisiJpaController {

    public KisiJpaController() {
        emf = Persistence.createEntityManagerFactory("AjaxJpaListPU");
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(Kisi kisi) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
//hibernate save(obje) ile data kayit eder. JPA ise persist(obje). persistance.xml dosyasinda
//bakin. Hibernate kullaniyor.
            em.persist(kisi);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(Kisi kisi) throws NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            kisi = em.merge(kisi);
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = kisi.getId();
                if (findKisi(id) == null) {
                    throw new NonexistentEntityException("The kisi with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Kisi kisi;
            try {
                kisi = em.getReference(Kisi.class, id);
                kisi.getId();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The kisi with id " + id + " no longer exists.", enfe);
            }
            em.remove(kisi);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Kisi> findKisiEntities() {
        return findKisiEntities(true, -1, -1);
    }

    public List<Kisi> findKisiEntities(int maxResults, int firstResult) {
        return findKisiEntities(false, maxResults, firstResult);
    }

    private List<Kisi> findKisiEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from Kisi as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Kisi findKisi(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Kisi.class, id);
        } finally {
            em.close();
        }
    }

    public int getKisiCount() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select count(o) from Kisi as o");
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

}

ethem.exceptions paketindekileri eklemiyorum. Pek bir şey yok o sınıflarda
index.jsp

<%-- 
    Document   : index
    Created on : Jan 29, 2011, 5:04:15 PM
    Author     : ubuntu
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<html>
<head>
<script type="text/javascript">
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {
  xmlhttp=new XMLHttpRequest();
  }
else
  {
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","Islem.jsp?secilen="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<select name="users" onchange="showUser(this.value)">
<option value="">Bir islem seç:</option>
<option value="1">Bir kisi ekle</option>
<option value="2">Id si 2 olan kisi bilgilerini sil</option>
<option value="3">Tum Kayitlari Listele</option>
<option value="4">Records count</option>
</select>
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div>

</body>
</html>

Islem.jsp

<%-- 
    Document   : Islem
    Created on : Jan 29, 2011, 5:35:42 PM
    Author     : ubuntu
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="ethem.Kisi,ethem.KisiJpaController,java.util.List, java.util.ArrayList" %>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%!            String hangiIslem;
            Kisi kisi;
            KisiJpaController kisi_control;
            List<Kisi> list;
        %>
        <%
                    list = new ArrayList<Kisi>();
                    hangiIslem = request.getParameter("secilen");
                    kisi_control = new KisiJpaController();

        %>
        <%
                    if (hangiIslem.equals("1")) {
                        kisi = new Kisi("Isil", "CANAKKALE", 25);
                        kisi_control.create(kisi);
                        out.println("Bir kisi veritabanina eklendi");
                    } else if (hangiIslem.equals("2")) {
                        kisi_control.destroy(2);
                        out.println("id=2 olan kayit silindi");
                    } else if (hangiIslem.equals("3")) {
//findKisiEntities(maxResults, firstResult) --> kac kayit olsun, hangi kayittan baslasin
                        list = kisi_control.findKisiEntities(kisi_control.getKisiCount(), 0);
                        out.println("<table border='1'><tr><th>ID</th><th>Ad</th><th>Soyad</th><th>Yas</th></tr>");
                        for (Kisi i : list) {
                            out.println("<tr><td>" + i.getId() + "</td><td>" + i.getAd() + "</td><td>" + i.getSoyad() + "</td><td>" + i.getYas() + "</td></tr>");
                        }
                        out.println("</table>");
                    } else if (hangiIslem.equals("4")) {
                        out.println("Toplam kayit sayisi: " + kisi_control.getKisiCount());
                    } else {
                        out.println("Herhangi bir ıslem secilmedi");
                        return;
                    }

        %>
    </body>
</html>

Bu örnekte PrimeFaces Hibernate ile nasıl kullanılabileceğini basitçe göstermeye çalıştım. JSF Hibernate örneğine bakabilirsiniz. PrimeFaces NetBeans 7.0 ile beraber default olarak geliyor. Örnekte ad ve soyad değerlerini hibernate kullanarak veritabanına kaydediyor.
Netbeans ile web projesi oluşturduktan sonra JavaServer Faces frameworkunu sçtikten sonra Components–>Components Suite–>PrimeFaces 2.1 seçiyoruz.
primefaces
Sonra Hibernate frameworkunu seçip bir tane database seçiniz. Hibernate örneğine bakabilirsiniz.
hibernate primefaces
JSF ve JSP ile ilgili detaylı bilgi için tıklayınız.
Projenizi sağ tıklayıp New–>Other–>JavaServer Faces–>JSF Faces Configuration ile faces-config.xml(JSF Managed Bean ayarları yapılır) dosyasını oluşturun. Sonra JSF Mnaged Bean oluşturun.
JSF Managed Bean
Aşağıdaki resimde JSF Managed Bean oluşturulurken IDE faces-config.xml dosyasında otomatik ayarlama kodunu yazıyor genelde.
facesconfig
Eğer kendisi oluşturmuyorsa aşağıdaki resimde görüldüğü gibi kendiniz de yazabilrisiniz.
managed bean
faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>

<!--Note: <managed-bean-name>uyeKaydet</managed-bean-name> Bean ismi kucuk harfle basliyor -->
<faces-config version="2.0"
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
   
   <managed-bean>
        <managed-bean-name>uyeKaydet</managed-bean-name>
        <managed-bean-class>ethem.UyeKaydet</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
</faces-config>

Burada .. kendinizde tanımlayabilirisniz.
Uygulama resmi
netbeans
Otomatik eklenilen PrimeFaces ve Hibernate jar dosyaları
jar
index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:p="http://primefaces.prime.com.tr/ui"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
      
       <h:form prependId="false">  
        <p:panel header="Uye Formu">  
            <h:panelGrid columns="2"> 
                
                <h:outputLabel value="Ad:*" for="ad_alani"></h:outputLabel>  
                <h:inputText id="ad_alani" value="#{uyeKaydet.yeniNesne.ad}" required="true"/>  

                <h:outputLabel value="Soyad:*" for="soyad_alani"></h:outputLabel>  
                <h:inputText id="soyad_alani" value="#{uyeKaydet.yeniNesne.soyad}" required="true"/>  

                <p:commandButton value="Add" actionListener="#{uyeKaydet.kaydet}"/>  
            </h:panelGrid>  
        </p:panel> 
           <h:panelGrid columns="2">
               <h:outputText value="#{uyeKaydet.yeniNesne.ad}"/>
               <h:outputText value="#{uyeKaydet.yeniNesne.soyad}"/>
           </h:panelGrid>
       </h:form>  
        
    </h:body>
</html>

PrimeFaces: xmlns:p=”http://primefaces.prime.com.tr/ui
Uye.java

package ethemsulan;
// Generated Dec 6, 2010 6:16:25 PM by Hibernate Tools 3.2.1.GA

public class Uye  implements java.io.Serializable {


     private Integer id;
     private String ad;
     private String soyad;

    public Uye() {
    }

    public Uye(String ad, String soyad) {
       this.ad = ad;
       this.soyad = soyad;
    }
   
    public Integer getId() {
        return this.id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    public String getAd() {
        return this.ad;
    }
    
    public void setAd(String ad) {
        this.ad = ad;
    }
    public String getSoyad() {
        return this.soyad;
    }
    
    public void setSoyad(String soyad) {
        this.soyad = soyad;
    }

}

UyeKaydet.java

package ethem;

import ethemsulan.Uye;

/**
 *
 * @author ubuntu
 */
public class UyeKaydet {
    
    private ImplementsMem impObject=new ImplementsMem();
    private Uye yeniNesne;

    public Uye getYeniNesne() {
        return yeniNesne;
    }

    public void setYeniNesne(Uye yeniNesne) {
        this.yeniNesne = yeniNesne;
    }
    public UyeKaydet() {
        yeniNesne=new Uye();
    }
//Hibernate ile kaydetmek için metod çağrılıyor.
    public void kaydet()
    {
        impObject.saveWithHibernate(yeniNesne);
    }

}

ImplementsMem.java

package ethem;

import ethemsulan.Uye;
import org.hibernate.Transaction;
import org.hibernate.Session;
import ethemsulan.HibernateUtil;

public class ImplementsMem {

    public void saveWithHibernate(Uye yeniNesne) {
    Session newSession=HibernateUtil.getSessionFactory().openSession();
    Transaction txT=newSession.beginTransaction();
    newSession.save(yeniNesne);
    System.out.println("Kayit basarili");
    txT.commit();
    newSession.close();
    }

}

Hibernate daha önce uygulamalarda açıklamaya çalışmıştım. Aşağıda bu örnekle ilgili kodlardır.
hibernate.reveng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
  <schema-selection match-catalog="sozluk"/>
  <table-filter match-name="uye"/>
</hibernate-reverse-engineering>

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sozluk</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">123</property>
    <mapping resource="ethemsulan/Uye.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

HibernateUtil.java

package ethemsulan;


import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

/**
 * Hibernate Utility class with a convenient method to get Session Factory object.
 *
 * @author ubuntu
 */
public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

JavaServer Faces(JSF) MVC(Model View Controller) patterni üzerine kurulmuştur. Model: Bu sınıflar işlenen verileri içerir. View: Model sınıfının içerdiği verileri gösterir. Controller: Model ve View arasındaki etkileşiminden sorumludur.
JSF’nin diğer bir özelliği işlemlerin daha hızlı ve basit gerçekleşmesi için JSTL kullanmasıdır. Bu da biraz sınırlama getirdğinden pek tercih etmiyorum. Bana JSP daha kolay ve eğlenceli geliyor. JSF 2.0 ile gelen PrimeFaces bileşen takımı JSF dünyasında bir devrim yarattı diyebiliriz.
Burada fazla detaya girmeden Java web, istemci taraflı applet, sunucu tabanlı teknolojiler ise Servlet, daha sonra html web sayfaları içine eklemesiyle JSP ve JSF şeklinde teknolojileri sıralayabiliriz. Ayrıca Java Web Frameworkleri var. Eğer Netbeans ile web projesini oluşturmayı bilmiyorsanız Merhaba JSP örneğine bakabilirisniz.
Jsf Hibernate
Yukardaki resimde görüldüğü gibi uygulamanıza JavaServer Faces ve Hibernate frameworklerini ekleyin. Eğer daha önce Hibernate için Database Connection oluşturmamışsanız Hibernate Ajax JSP örneğine bakabilirisniz.

Proje oluşturduktan sonra welcomeJSF.jsp ve hibernate.cfg.xml dosyaları oluşur. Diğer hibernate dosyaların oluşturmak için resimdeki sırayı takip edebilrisiniz.
hibernate query and jsf
Kontrol.java

package ethem;

import ethemsulan.Kisi;
import ethemsulan.NewHibernateUtil;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

public class Kontrol {

    private ArrayList<Kisi> listemiz;

    public ArrayList<Kisi> getListemiz() {
        return listemiz;
    }

    public void setListemiz(ArrayList<Kisi> listemiz) {
        this.listemiz = listemiz;
    }
    private Session session;

    public ArrayList<Kisi> getAllRecord() {
        listemiz = new ArrayList<Kisi>();
        session = NewHibernateUtil.getSessionFactory().openSession();
        String sql = "select {k.*} from kisi k";
        SQLQuery query = session.createSQLQuery(sql);
        query.addEntity("k", Kisi.class);
        List list = query.list();
        Iterator ite = list.iterator();
        while (ite.hasNext()) {
            Kisi ws = (Kisi) ite.next();
            getListemiz().add(ws);
        }
        session.close();
        return getListemiz();
    }
}

Hibernate ile ilgili işlemlerden Kontrol.java sınıfını yazdım ve faces-config.xml içine tanımladım. Kontrol.java sınıfı ismi ve hangi paket altında olduğunu belirttim.
faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

<managed-bean>
    <managed-bean-name>Kontrol</managed-bean-name>
    <managed-bean-class>ethem.Kontrol</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

</faces-config>

2. welcomeJSF.jsp zaten proje oluşturuken yaratılıyor. Çalıştırıldığında sayfada MySql veritabanında kisi ismindeki tablodaki(id,ad,soyad sutunları var sadece) bilgileri JSF data table içinde listeledim.
welcomeJSF.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%-- JSTL taglibler. --%>
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<%--
    This file is an entry point for JavaServer Faces application.
--%>
<f:view>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <title>JSP Page</title>
        </head>
        <body>
            <h:dataTable id="id" value="#{Kontrol.allRecord}" var="item">
                <h:column>
                    <h:outputText value="#{item.id}">Id:</h:outputText><br>
                </h:column>
                <h:column>
                    <h:outputText value="#{item.ad}">Ad:</h:outputText><br>
                </h:column>
                <h:column>
                    <h:outputText value="#{item.soyad}">Soyad:</h:outputText><br>
                </h:column>
            </h:dataTable>
        </body>
    </html>
</f:view>

Note: value=”#{Kontrol.allRecord}” var=”item” kayıtlara erişiyoruz. value=”#{item.ad}” ile veritabanından çekilen ad recorduna erişiyoruz. Daha iyi anlamak için JSTL ile MySql örneğine bakabilirsiniz.
Cikti aşağıdaki gibidir.
çıktı jsf
Diğer dosyaların da sadece kodlarını ekliyorum.

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sozluk</prope<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/welcomeJSF.jsp</welcome-file>
    </welcome-file-list>
</web-app>rty>
    <property name="hibernate.connection.username">root</property>
    <mapping resource="ethemsulan/Kisi.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

hibernate.reveng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
  <schema-selection match-catalog="sozluk"/>
  <table-filter match-name="kisi"/>
</hibernate-reverse-engineering>

Kisi.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Nov 6, 2010 3:17:52 AM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
  <class catalog="sozluk" name="ethemsulan.Kisi" table="kisi">
    <id name="id" type="java.lang.Integer">
      <column name="id"/>
      <generator class="identity"/>
    </id>
    <property name="ad" type="string">
      <column name="ad"/>
    </property>
    <property name="soyad" type="string">
      <column name="soyad"/>
    </property>
  </class>
</hibernate-mapping>

Kisi.java

package ethemsulan;
// Generated Nov 6, 2010 3:17:52 AM by Hibernate Tools 3.2.1.GA

/**
 * Kisi generated by hbm2java
 */
public class Kisi  implements java.io.Serializable {
    
     private Integer id;
     private String ad;
     private String soyad;

    public Kisi() {
    }

    public Kisi(String ad, String soyad) {
       this.ad = ad;
       this.soyad = soyad;
    }
   
    public Integer getId() {
        return this.id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    public String getAd() {
        return this.ad;
    }
    
    public void setAd(String ad) {
        this.ad = ad;
    }
    public String getSoyad() {
        return this.soyad;
    }
    
    public void setSoyad(String soyad) {
        this.soyad = soyad;
    }
}

NewHibernateUtil.java

package ethemsulan;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

public class NewHibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/welcomeJSF.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Bu uygulamada JSP ile Hibernate ve Ajax kullanmaya çalıştım. ORM dedikleri teknik işte bu hibernate frameworkunun sağladığı avantajlardır.
JSP ile Persist ORM/DAO örneğinde kısaca orm ve dao açıklanmış. Hibernate benzer bir kütüphane olan persist kullanmış.
Netbeans kurulumu tıklayarak resimdeki gibi 4 tane frameworklerden(bu framework sayıları siz de farklı olabilir) hibernateyi seçin. Hibernateyi seçince Database Connectiondan New Database Connectionu seçerek hangi veritabanıyla çalışmak istediğinizi seçin.Uygulamada ben mysql seçtim. Aşağıdaki Driver Name kısmından mysql seçtikten sonra mysql bağlanma bilgileri var. Eğer hibernate siz de yüklü değilse Tool–>Plugins–>Available Plugins–>Hibernate seçip yükleyin.

mysql connector

Driveri ekledikten sonra finish tıklayınca uygulamanızın source packages altında default packagenin altında hibernate.cfg.xml(Hibernate Configuration Wizard) dosyası otomatik eklenecek.

hibernate

Uygulamanızda bir paket oluşturun(örnekteki ethemsulan.com paketi) ve sağ tıklayarak new–>other–>hibernate Hibernate Reverse Engineering Wizardı seçerek yukarda bağlantı sağladığınız database tablolarından çalışmak istediğiniz tabloyu uygulamanıza aşağıdaki resimde görüldüğü gibi sağ tarafa add ile alarak uygulamanıza ekleyin.

hibernate.reveng.xml(ibernate Reverse Engineering Wizard) dosyasının bulunduğu paketi tıklayark Hibernate Mapping Files and POJOs from Database seçerek uygulamanıza eklediğiniz tabloya ait bir Kitap.hbm.xml dosyası ve Kitap.java sınıfını otomatik oluşturuyor.Yani tablonuza ait sınıf kodunu kendisi oluşturuyor.
Son olarak HibernateUtil.java tıklayarak oluşturun.Bu HibernateUtil veritabanına bir connection objesi yaratıyor.

hibernate ajax

KIsaca özetlersek
1.Web uygulada hibernate seçip bir database connector oluşturduktan sonra finish deyince Hibernate Configuration Wizard xml dosyasını oluşturuyor.
2.Bir paket oluşturup Hibernate Reverse Engineering Wizard seçerek hangi tablolarla çalışacaksak uygulamaya dahil ediyoruz(seçip add ile sağ tarafa alıyoruz)
3.Hibernate Mapping Files and POJOs from Database(ikinci adımda oluşturulan paketi sağ tıklayark bunu oluşturun) seçerek Ikinci adımda eklenen tabloları bir sınıfla eşleştirip ve bu sınıfın java kodunu üretiyoruz.
4.HibernateUtil.java seçin.Database ile ilgili işlemleri yapmamızı sağlar.

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
<!-- Ajax için jquery-1.4.2.min.js dosyasını ekledik.$.get("Islemler.jsp", $('#form1').serialize() ile formdaki
nesneleri Islemler.jsp sayfasından erişip veritabanına kaydettik.
$('#butId').click() verilen id ye sahip button tıklanınca gerçekleştirilecel işlemler () içine yazdık.
$ anlamı jQquery demektir.-->
        <script type="text/javascript" language="javascript" src="jquery-1.4.2.min.js"></script>
        <script type="text/javascript" language="javascript">
            $(function(){
                $('#butId').click(function(){
                    $.get("Islemler.jsp", $('#form1').serialize(), function(sonuc){
                        $('#divId').html(sonuc);
                        alert("Kayit Basariyla gerçekleşti");
                    })
                });
            });

        </script>
    </head>
    <body>
        <form id="form1">
            <table>
                <tr>
                    <td>ISBN</td>
                    <td><input type="text" name="isbn" value="" /></td>
                </tr>
                <tr>
                    <td>Ad</td>
                    <td><input name="ad" type="text" value="" /></td>
                </tr>
                <tr>
                    <td>Yazar</td>
                    <td><input name="yazar" type="text" value=""></td>
                </tr>
                <tr>
                    <td>Kategori</td>
                    <td><input id="kategori" name="kategori" type="text" value=""></td>
                </tr>
            </table>
        </form>
        <div id="divId"></div>
        <p><button id="butId">Ajax Kullanarak Kaydet</button></p>
    </body>
</html>

Islemler.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="ethemsulan.com.HibernateUtil, org.hibernate.Session" %>
<%@page import="org.hibernate.Transaction, ethemsulan.com.Kitap" %>
<%!
    Kitap kitapObj;
    String isbn, ad, yazar, kategori;
%>
<%--index.jsp içindeki  $('#form1').serialize() kodu ile formdaki alanalra isimleriyle bu sayfadan erişiyoruz.
alanlardaki name="alan ismi" yani name mutlaka olmalıdır serialize() için.
Aşağıda HibernateUtil ile session oluşturduk ve bir transaction başlattık save ile objemizi veritabanına kayit ettik.
--%>
<%
    isbn=request.getParameter("isbn");
    ad=request.getParameter("ad");
    yazar=request.getParameter("yazar");
    kategori=request.getParameter("kategori");
    kitapObj=new Kitap(isbn, ad, yazar, kategori);
    Session newSession=HibernateUtil.getSessionFactory().openSession();
    Transaction txT=newSession.beginTransaction();
    newSession.save(kitapObj);
    out.println("Kayit basariyla gerçekleşti");
    txT.commit();
    newSession.close();

%>

hibernate.cfg.xml(Hibernate Configuration Wizard) dosyamızda veritabanıyla(mysql) ilgili erişim ve kaynak bilgileri var

<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ethemsulan</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">123</property>
    <mapping resource="ethemsulan/com/Kitap.hbm.xml"/>
  </session-factory>
</hibernate-configuration>


hibernate.reveng.xml
(Hibernate Reverse Engineering Wizard) dosyamızda hangi databasenin hangi tabloların olduğunu gösterilmiş.

<hibernate-reverse-engineering>
  <schema-selection match-catalog="ethemsulan"/>
  <table-filter match-name="kitap"/>
</hibernate-reverse-engineering>

kitap.hbm.xml(Hibernate Mapping Files and POJOs from Database ) sınıfın element ve attributlerini xml şeklinde oluşturmuş

<hibernate-mapping>
  <class catalog="ethemsulan" name="ethemsulan.com.Kitap" table="kitap">
    <id name="isbn" type="string">
      <column name="isbn"/>
      <generator class="assigned"/>
    </id>
    <property name="ad" type="string">
      <column name="ad"/>
    </property>
    <property name="yazar" type="string">
      <column name="yazar"/>
    </property>
    <property name="kategori" type="string">
      <column name="kategori"/>
    </property>
  </class>
</hibernate-mapping>


Kitap.java
otomatik oluşturulan java sınıfı

package ethemsulan.com;
public class Kitap  implements java.io.Serializable {
     private String isbn;
     private String ad;
     private String yazar;
     private String kategori;

    public Kitap() {
    }
    public Kitap(String isbn) {
        this.isbn = isbn;
    }
    public Kitap(String isbn, String ad, String yazar, String kategori) {
       this.isbn = isbn;
       this.ad = ad;
       this.yazar = yazar;
       this.kategori = kategori;
    }

    public String getIsbn() {
        return this.isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }
    public String getAd() {
        return this.ad;
    }

    public void setAd(String ad) {
        this.ad = ad;
    }
    public String getYazar() {
        return this.yazar;
    }

    public void setYazar(String yazar) {
        this.yazar = yazar;
    }
    public String getKategori() {
        return this.kategori;
    }

    public void setKategori(String kategori) {
        this.kategori = kategori;
    }
}