Mehmet Ethem SULAN :: JPA(Java Persistence API), Hibernate JSF JSP JavaScript Ajax jQuery CSS ORM(Object Relation Mapping) :: JPA and Hibernate with JSP Ajax Example

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>

Write a Comment

Let me know what you think?