JPA - Entity Managers
W tym rozdziale przedstawiono prosty przykład z JPA. Weźmy na przykład zarządzanie pracownikami. Oznacza to, że kierownictwo pracowników tworzy, aktualizuje, wyszukuje i usuwa pracownika. Jak wspomniano powyżej, używamy bazy danych MySQL do operacji na bazach danych.
Główne moduły w tym przykładzie są następujące:
Model or POJO
Employee.java
Persistence
Persistence.xml
Service
CreatingEmployee.java
UpdatingEmployee.java
FindingEmployee.java
DeletingEmployee.java
Weźmy hierarchię pakietów, której używaliśmy podczas instalacji JPA z Eclipselink. Postępuj zgodnie z hierarchią w tym przykładzie, jak poniżej:
Tworzenie jednostek
Encje to nic innego jak fasole lub modele, w tym przykładzie użyjemy Employee jako jednostka. eid, ename, salary, i degsą atrybutami tej jednostki. Zawiera domyślny konstruktor, metody ustawiające i pobierające te atrybuty.
W powyższej hierarchii utwórz pakiet o nazwie ‘com.tutorialspoint.eclipselink.entity’, pod ‘src’Pakiet (źródło). Utwórz klasę o nazwieEmployee.java pod danym pakietem w następujący sposób:
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 + "]";
}
}
W powyższym kodzie użyliśmy adnotacji @Entity, aby uczynić tę klasę POJO jako jednostkę.
Przed przejściem do kolejnego modułu musimy stworzyć bazę danych dla encji relacyjnej, w której będzie rejestrowana baza danych persistence.xmlplik. Otwórz Środowisko pracy MySQL i wpisz zapytanie w następujący sposób:
create database jpadb
use jpadb
Persistence.xml
Moduł ten odgrywa kluczową rolę w koncepcji JPA. W tym pliku xml zarejestrujemy bazę danych i określimy klasę jednostki.
W przedstawionej powyżej hierarchii pakietów, persistence.xml w pakiecie JPA Content wygląda następująco:
<?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>
W powyższym pliku XML tag <persistence-unit> jest zdefiniowany z określoną nazwą dla trwałości JPA. Tag <class> definiuje klasę jednostki z nazwą pakietu. Tag <properties> definiuje wszystkie właściwości, a tag <property> określa każdą właściwość, taką jak rejestracja bazy danych, specyfikacja adresu URL, nazwa użytkownika i hasło. Oto właściwości Eclipselink. Ten plik skonfiguruje bazę danych.
Operacje trwałości
Operacje trwałości są używane w odniesieniu do bazy danych i tak jest load i storeoperacje. W komponencie biznesowym wszystkie operacje trwałości należą do klas usług.
W powyższej hierarchii pakietów utwórz pakiet o nazwie ‘com.tutorialspoint.eclipselink.service’, pod ‘src’(źródłowy) pakiet. Wszystkie klasy usług o nazwach CreateEmloyee.java, UpdateEmployee.java, FindEmployee.java i DeleteEmployee.java. podlega podanemu pakietowi w następujący sposób:
Utwórz pracownika
Tworzenie klasy Employee o nazwie as CreateEmployee.java następująco:
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( );
}
}
W powyższym kodzie createEntityManagerFactory ()tworzy jednostkę trwałości, podając tę samą unikalną nazwę, którą podajemy dla jednostki trwałości w pliku persistent.xml. Obiekt uprawniający do tworzenia uprawnień utworzy instancję modułu uprawniającego przy użyciucreateEntityManager ()metoda. Obiekt entitytransaction tworzy instancję entitytransaction do zarządzania transakcjami. Korzystając z obiektu uprawnionego, możemy utrwalać jednostki w bazie danych.
Po skompilowaniu i wykonaniu powyższego programu otrzymasz powiadomienia z biblioteki eclipselink na panelu konsoli eclipse IDE.
Aby uzyskać wynik, otwórz Środowisko robocze MySQL i wpisz następujące zapytania.
use jpadb
select * from employee
Efektywna tabela bazy danych o nazwie employee zostanie wyświetlony w formie tabelarycznej w następujący sposób:
Eid | Ename | Wynagrodzenie | Deg |
---|---|---|---|
1201 | Gopal | 40000 | Menedżer techniczny |
Zaktualizuj pracownika
Aby zaktualizować pracownika, musimy uzyskać bazę danych formularza rekordów, wprowadzić zmiany i ostatecznie zatwierdzić. Klasa o nazwieUpdateEmployee.java przedstawia się następująco:
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();
}
}
Po skompilowaniu i wykonaniu powyższego programu otrzymasz powiadomienia z biblioteki Eclipselink na panelu konsoli eclipse IDE.
Aby uzyskać wynik, otwórz Środowisko robocze MySQL i wpisz następujące zapytania.
use jpadb
select * from employee
Efektywna tabela bazy danych o nazwie employee zostanie wyświetlony w formie tabelarycznej w następujący sposób:
Eid | Ename | Wynagrodzenie | Deg |
---|---|---|---|
1201 | Gopal | 46000 | Menedżer techniczny |
Wynagrodzenie pracownika 1201 zostało zaktualizowane do 46000.
Znajdź pracownika
Aby znaleźć pracownika, pobierzemy rekord z bazy danych i wyświetlimy go. W tej operacji EntityTransaction nie jest zaangażowana żadna transakcja nie jest stosowana podczas pobierania rekordu.
Klasa o nazwie FindEmployee.java następująco.
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( ));
}
}
Po skompilowaniu i wykonaniu powyższego programu otrzymasz dane wyjściowe z biblioteki Eclipselink na panelu konsoli eclipse IDE w następujący sposób:
employee ID = 1201
employee NAME = Gopal
employee SALARY = 46000.0
employee DESIGNATION = Technical Manager
Usuwanie pracownika
Aby usunąć pracownika, najpierw znajdziemy rekord, a następnie go usuniemy. Tutaj EntityTransaction odgrywa ważną rolę.
Klasa o nazwie DeleteEmployee.java następująco:
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( );
}
}
Po skompilowaniu i wykonaniu powyższego programu otrzymasz powiadomienia z biblioteki Eclipselink na panelu konsoli eclipse IDE.
Aby uzyskać wynik, otwórz Środowisko robocze MySQL i wpisz następujące zapytania.
use jpadb
select * from employee
Powstała baza danych o nazwie employee będą miały puste rekordy.
Po zakończeniu wszystkich modułów w tym przykładzie hierarchia pakietów i plików jest pokazana w następujący sposób: