D21 - TP2 - JPA Java Persistence API
Maven et JPA
- Créer un projet maven à partir de l’archetype quickstart
mvn archetype:generate
- Modifier le pom.xml pour ajouter les dépendances vers la base de données et l’implantation de JPA. Par exemple pour postgresql et eclipselink :
- pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>fr.univ_tln.bruno.test</groupId> <artifactId>jpa</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>jpa</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.7.7</version> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.5</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!-- Compilateur Java --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
persistence.xml
- Définir le ou les supports de persistance du projet en créant un fichier
src/main/resources/META-INF/persistence.xml
. L’exemple suivant configure une unité de persistance appeléetestpostgresqllocal
. Il faut au minimum adapter la configuration de jdbc (url, user et password).
- persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1"> <persistence-unit name="testpostgresqllocal" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <properties> <!-- Les paramètres de connexions --> <property name="javax.persistence.target-database" value="PostgreSQL"/> <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/test"/> <property name="javax.persistence.jdbc.user" value="test"/> <property name="javax.persistence.jdbc.password" value="test"/> <!-- Les options de générations des tables --> <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> <property name="javax.persistence.schema-generation.scripts.action" value="drop-and-create"/> <property name="javax.persistence.schema-generation.scripts.create-target" value="sampleCreate.ddl"/> <property name="javax.persistence.schema-generation.scripts.drop-target" value="sampleDrop.ddl"/> <property name="javax.persistence.sql-load-script-source" value="insert.sql"/> </properties> </persistence-unit> </persistence>
Création et manipulation simple d'une entité
Créer une entité Personne possédant un entier comme identifiant, un nom, un prénom et un âge.
Ajouter la définition de l’entité dans le persistence.xml
(<class>fr.univ_tln.bruno.test.jpa.Personne</class>
dans persistence-unit).
Créer une classe exécutable Test1
qui :
- crée un entityManager
- instancie des Personnes et les rend persistantes.
EntityManagerFactory emf = Persistence .createEntityManagerFactory("testpostgresqllocal"); EntityManager em = emf.createEntityManager(); Personne p1 = new Personne("Pierre","Durand"); EntityTransaction transac = em.getTransaction(); transac.begin(); em.persist(p1); transac.commit()
Créer une classe Test2
qui :
- crée un
entityManager
- restaure les personnes précédentes en utilisant leur identifiant et les affiche
- les modifie en augmentant leur poids de 1 et les met à jour dans la base (cf. les méthodes en
EntityManager
).
Personne personne = em.find(Personne.class, 1);
Compléter l'application
Définir qu’une personne ne possède qu’un seul chien, chaque chien n’ayant qu’un seul propriétaire. Une personne est maintenant définie par son couple (nom,prénom) supposé unique dans l’application.
Définir un chenil qui peut contenir plusieurs chiens.
Définir une pathologie (elle a un nom et et une description), un chien peut en avoir plusieurs.
Mettre en place, les cascades pour que la suppression d’un Chien supprime ses pathologies mais pas son maître.
DAO Generique
En vous inspirant de http://www.adam-bien.com/roller/abien/entry/generic_crud_service_aka_dao mettez en place une DAO générique qui propose les opérations CRUD et l’appel de requêtes nommées.
Pour finir
Pour écrire des requêtes dans un langage de haut niveau et utiliser un cache lisez les chapitres 42,43,44 et 46 de la partie concernant la persistance du tutoriel de JavaEE https://javaee.github.io/tutorial/partpersist.html#BNBPY
—- dataentry page —- type : TP enseignement_tags : D21 technologie_tags : JPA, Stream, Lambda, Java theme_tags : POO, Persistance, CRUD, DAO