JPA - Gestionnaires d'entités
Ce chapitre vous présente un exemple simple avec JPA. Prenons l'exemple de la gestion des employés. Cela signifie que la direction des employés crée, met à jour, recherche et supprime un employé. Comme mentionné ci-dessus, nous utilisons la base de données MySQL pour les opérations de base de données.
Les principaux modules de cet exemple sont les suivants:
Model or POJO
Employee.java
Persistence
Persistence.xml
Service
CreatingEmployee.java
UpdatingEmployee.java
FindingEmployee.java
DeletingEmployee.java
Prenons la hiérarchie des packages que nous avons utilisée dans l'installation JPA avec Eclipselink. Suivez la hiérarchie de cet exemple comme ci-dessous:
Créer des entités
Les entités ne sont rien d'autre que des beans ou des modèles, dans cet exemple nous utiliserons Employee en tant qu'entité. eid, ename, salary, et degsont les attributs de cette entité. Il contient les méthodes constructeur, setter et getter par défaut de ces attributs.
Dans la hiérarchie ci-dessus, créez un package nommé ‘com.tutorialspoint.eclipselink.entity’, en dessous de ‘src’(Source) package. Créez une classe nomméeEmployee.java sous le paquet donné comme suit:
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 + "]";
}
}
Dans le code ci-dessus, nous avons utilisé l'annotation @Entity pour faire de cette classe POJO une entité.
Avant de passer au module suivant, nous devons créer une base de données pour l'entité relationnelle, qui enregistrera la base de données dans persistence.xmlfichier. Ouvrez MySQL workbench et tapez la requête comme suit:
create database jpadb
use jpadb
Persistence.xml
Ce module joue un rôle crucial dans le concept de JPA. Dans ce fichier xml, nous enregistrerons la base de données et spécifierons la classe d'entité.
Dans la hiérarchie de packages illustrée ci-dessus, persistence.xml sous JPA Content package est la suivante:
<?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>
Dans le xml ci-dessus, la balise <persistence-unit> est définie avec un nom spécifique pour la persistance JPA. La balise <class> définit la classe d'entité avec le nom du package. La balise <properties> définit toutes les propriétés et la balise <property> définit chaque propriété telle que l'enregistrement de la base de données, la spécification d'URL, le nom d'utilisateur et le mot de passe. Ce sont les propriétés Eclipselink. Ce fichier configurera la base de données.
Opérations de persistance
Les opérations de persistance sont utilisées contre la base de données et sont load et storeopérations. Dans un composant métier, toutes les opérations de persistance relèvent des classes de service.
Dans la hiérarchie de packages illustrée ci-dessus, créez un package nommé ‘com.tutorialspoint.eclipselink.service’, en dessous de ‘src’(source) package. Toutes les classes de service nommées CreateEmloyee.java, UpdateEmployee.java, FindEmployee.java et DeleteEmployee.java. relève du package donné comme suit:
Créer un employé
Création d'une classe Employee nommée CreateEmployee.java comme suit:
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( );
}
}
Dans le code ci-dessus, le createEntityManagerFactory ()crée une unité de persistance en fournissant le même nom unique que celui fourni pour l'unité de persistance dans le fichier persistent.xml. L'objet entitymanagerfactory créera l'instance entitymanger en utilisantcreateEntityManager ()méthode. L'objet entitymanager crée une instance entitytransaction pour la gestion des transactions. En utilisant l'objet entitymanager, nous pouvons conserver les entités dans la base de données.
Après la compilation et l'exécution du programme ci-dessus, vous recevrez des notifications de la bibliothèque eclipselink sur le panneau de la console de l'EDI eclipse.
Pour obtenir le résultat, ouvrez le plan de travail MySQL et saisissez les requêtes suivantes.
use jpadb
select * from employee
La table de base de données affectée nommée employee sera affiché dans un format tabulaire comme suit:
Eid | Ename | Un salaire | Degré |
---|---|---|---|
1201 | Gopal | 40000 | Directeur technique |
Mettre à jour l'employé
Pour mettre à jour un employé, nous devons obtenir la base de données du formulaire d'enregistrement, apporter des modifications et enfin la valider. La classe nomméeUpdateEmployee.java s'affiche comme suit:
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();
}
}
Après la compilation et l'exécution du programme ci-dessus, vous recevrez des notifications de la bibliothèque Eclipselink sur le panneau de la console de l'EDI eclipse.
Pour obtenir le résultat, ouvrez le plan de travail MySQL et saisissez les requêtes suivantes.
use jpadb
select * from employee
La table de base de données affectée nommée employee sera affiché dans un format tabulaire comme suit:
Eid | Ename | Un salaire | Degré |
---|---|---|---|
1201 | Gopal | 46 000 | Directeur technique |
Le salaire de l'employé, 1201 est mis à jour à 46000.
Trouver un employé
Pour trouver un employé, nous allons obtenir un enregistrement de la base de données et l'afficher. Dans cette opération, EntityTransaction n'est pas impliquée, aucune transaction n'est appliquée lors de la récupération d'un enregistrement.
La classe nommée FindEmployee.java comme suit.
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( ));
}
}
Après la compilation et l'exécution du programme ci-dessus, vous obtiendrez la sortie de la bibliothèque Eclipselink sur le panneau de la console de l'EDI eclipse comme suit:
employee ID = 1201
employee NAME = Gopal
employee SALARY = 46000.0
employee DESIGNATION = Technical Manager
Suppression d'un employé
Pour supprimer un employé, nous allons d'abord trouver l'enregistrement, puis le supprimer. Ici, EntityTransaction joue un rôle important.
La classe nommée DeleteEmployee.java comme suit:
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( );
}
}
Après la compilation et l'exécution du programme ci-dessus, vous recevrez des notifications de la bibliothèque Eclipselink sur le panneau de la console de l'EDI eclipse.
Pour obtenir le résultat, ouvrez le plan de travail MySQL et saisissez les requêtes suivantes.
use jpadb
select * from employee
La base de données affectée nommée employee aura des enregistrements nuls.
Une fois tous les modules de cet exemple terminés, la hiérarchie des packages et des fichiers s'affiche comme suit: