JPA - Varlık Yöneticileri

Bu bölüm size JPA ile basit bir örnek verir. Çalışan yönetimini örnek alalım. Çalışan yönetiminin bir çalışanı yarattığı, güncellediği, bulduğu ve sildiği anlamına gelir. Yukarıda belirtildiği gibi, veritabanı işlemleri için MySQL veritabanını kullanıyoruz.

Bu örnek için ana modüller aşağıdaki gibidir:

  • Model or POJO

    Employee.java

  • Persistence

    Persistence.xml

  • Service

    CreatingEmployee.java

    UpdatingEmployee.java

    FindingEmployee.java

    DeletingEmployee.java

Eclipselink ile JPA kurulumunda kullandığımız paket hiyerarşisini ele alalım. Bu örnek için aşağıdaki hiyerarşiyi izleyin:

Varlıklar Oluşturma

Varlıklar fasulye veya Modellerden başka bir şey değildir, bu örnekte kullanacağız Employee varlık olarak. eid, ename, salary, ve degbu varlığın özellikleridir. Bu özniteliklerin varsayılan yapıcı, ayarlayıcı ve alıcı yöntemlerini içerir.

Yukarıda gösterilen hiyerarşide, adında bir paket oluşturun ‘com.tutorialspoint.eclipselink.entity’, altında ‘src’(Kaynak) paketi. Adlı bir sınıf oluşturunEmployee.java verilen paketin altında aşağıdaki gibidir:

package com.tutorialspoint.eclipselink.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
public class Employee {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO) 	
   
   private int eid;
   private String ename;
   private double salary;
   private String deg;
   
   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }
   
   public void setEid(int eid) {
      this.eid = eid;
   }
   
   public String getEname( ) {
      return ename;
   }
   
   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }
   
   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }
   
   public void setDeg(String deg) {
      this.deg = deg;
   }
   
   @Override
   public String toString() {
      return "Employee [eid=" + eid + ", ename=" + ename + ", salary=" + salary + ", deg=" + deg + "]";
   }
}

Yukarıdaki kodda, bu POJO sınıfını varlık olarak yapmak için @Entity ek açıklamasını kullandık.

Bir sonraki modüle geçmeden önce, ilişkisel varlık için veritabanını kaydetmemiz gerekiyor. persistence.xmldosya. MySQL tezgahını açın ve aşağıdaki gibi sorguyu yazın:

create database jpadb
use jpadb

Persistence.xml

Bu modül, JPA konseptinde çok önemli bir rol oynamaktadır. Bu xml dosyasında veritabanını kaydedeceğiz ve varlık sınıfını belirleyeceğiz.

Yukarıda gösterilen paket hiyerarşisinde, JPA İçerik paketi altındaki persistence.xml aşağıdaki gibidir:

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

<persistence version="2.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_2_0.xsd">
   
   <persistence-unit name="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL">
   
      <class>com.tutorialspoint.eclipselink.entity.Employee</class>

      <properties>
         <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpadb"/>
         <property name="javax.persistence.jdbc.user" value="root"/>
         <property name="javax.persistence.jdbc.password" value="root"/>
         <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
         <property name="eclipselink.logging.level" value="FINE"/>
         <property name="eclipselink.ddl-generation" value="create-tables"/>
      </properties>
      
   </persistence-unit>
</persistence>

Yukarıdaki xml'de <persistence-unit> etiketi, JPA kalıcılığı için belirli bir adla tanımlanmıştır. <class> etiketi, varlık sınıfını paket adıyla tanımlar. <properties> etiketi tüm özellikleri, <property> etiketi ise veritabanı kaydı, URL spesifikasyonu, kullanıcı adı ve şifre gibi her özelliği tanımlar. Bunlar Eclipselink özellikleridir. Bu dosya veri tabanını yapılandıracaktır.

Kalıcılık İşlemleri

Kalıcılık işlemleri veritabanına karşı kullanılır ve load ve storeoperasyonlar. Bir iş bileşeninde, tüm kalıcılık işlemleri hizmet sınıflarına girer.

Yukarıda gösterilen paket hiyerarşisinde, adında bir paket oluşturun ‘com.tutorialspoint.eclipselink.service’, altında ‘src’(kaynak) paketi. CreateEmloyee.java, UpdateEmployee.java, FindEmployee.java ve DeleteEmployee.java olarak adlandırılan tüm hizmet sınıfları. verilen paketin altına şu şekilde gelir:

Çalışan Oluşturun

Adlı bir Employee sınıfı oluşturma CreateEmployee.java aşağıdaki gibi:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class CreateEmployee {

   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      Employee employee = new Employee( ); 
      employee.setEid( 1201 );
      employee.setEname( "Gopal" );
      employee.setSalary( 40000 );
      employee.setDeg( "Technical Manager" );
      
      entitymanager.persist( employee );
      entitymanager.getTransaction( ).commit( );

      entitymanager.close( );
      emfactory.close( );
   }
}

Yukarıdaki kodda createEntityManagerFactory ()kalıcı.xml dosyasında kalıcılık birimi için sağladığımız aynı benzersiz adı sağlayarak bir kalıcılık birimi oluşturur. Entitymanagerfactory nesnesi, entitymanger örneğini kullanarakcreateEntityManager ()yöntem. Entitymanager nesnesi, işlem yönetimi için entitytransaction örneğini oluşturur. Entitymanager nesnesini kullanarak, varlıkları veritabanında kalıcı hale getirebiliriz.

Yukarıdaki programı derledikten ve çalıştırdıktan sonra, eclipse IDE'nin konsol panelindeki eclipselink kitaplığından bildirimler alacaksınız.

Sonuç için MySQL çalışma tezgahını açın ve aşağıdaki sorguları yazın.

use jpadb
select * from employee

Etkilenen veritabanı tablosu adlı employee aşağıdaki gibi bir tablo formatında gösterilecektir:

Bayram Ename Maaş Derece
1201 Gopal 40000 Teknik Müdür

Çalışanı Güncelle

Bir çalışanı güncellemek için, kayıt formu veritabanını almamız, değişiklikler yapmamız ve sonunda onu teslim etmemiz gerekir. Adlı sınıfUpdateEmployee.java aşağıdaki gibi gösterilir:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class UpdateEmployee {
   public static void main( String[ ] args ) {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );
      Employee employee = entitymanager.find( Employee.class, 1201 );
      
      //before update
      System.out.println( employee );
      employee.setSalary( 46000 );
      entitymanager.getTransaction( ).commit( );
      
      //after update
      System.out.println( employee );
      entitymanager.close();
      emfactory.close();
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra eclipse IDE'nin konsol panelindeki Eclipselink kütüphanesinden bildirimler alacaksınız.

Sonuç için MySQL çalışma tezgahını açın ve aşağıdaki sorguları yazın.

use jpadb
select * from employee

Etkilenen veritabanı tablosu adlı employee aşağıdaki gibi bir tablo formatında gösterilecektir:

Bayram Ename Maaş Derece
1201 Gopal 46000 Teknik Müdür

1201 çalışanın maaşı 46000 olarak güncellendi.

Çalışan Bul

Bir çalışan bulmak için veritabanından kayıt alıp görüntüleyeceğiz. Bu işlemde, EntityTransaction bir kayıt alınırken herhangi bir işlem uygulanmaz.

Adlı sınıf FindEmployee.java aşağıdaki gibi.

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class FindEmployee {
   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager();
      Employee employee = entitymanager.find( Employee.class, 1201 );

      System.out.println("employee ID = " + employee.getEid( ));
      System.out.println("employee NAME = " + employee.getEname( ));
      System.out.println("employee SALARY = " + employee.getSalary( ));
      System.out.println("employee DESIGNATION = " + employee.getDeg( ));
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra, eclipse IDE'nin konsol panelindeki Eclipselink kitaplığından aşağıdaki gibi çıktı alacaksınız:

employee ID = 1201
employee NAME = Gopal
employee SALARY = 46000.0
employee DESIGNATION = Technical Manager

Çalışanı Silme

Bir Çalışanı Silmek için önce kaydı bulup sonra sileceğiz. Burada EntityTransaction önemli bir rol oynar.

Adlı sınıf DeleteEmployee.java aşağıdaki gibi:

package com.tutorialspoint.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.tutorialspoint.eclipselink.entity.Employee;

public class DeleteEmployee {
   public static void main( String[ ] args ) {
   
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );
      
      Employee employee = entitymanager.find( Employee.class, 1201 );
      entitymanager.remove( employee );
      entitymanager.getTransaction( ).commit( );
      entitymanager.close( );
      emfactory.close( );
   }
}

Yukarıdaki programı derledikten ve çalıştırdıktan sonra eclipse IDE'nin konsol panelindeki Eclipselink kütüphanesinden bildirimler alacaksınız.

Sonuç için MySQL çalışma tezgahını açın ve aşağıdaki sorguları yazın.

use jpadb
select * from employee

Etkilenen veritabanı adlı employee boş kayıtlara sahip olacak.

Bu örnekteki tüm modüllerin tamamlanmasından sonra, paket ve dosya hiyerarşisi aşağıdaki gibi gösterilir: