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: