Archives Wild Code School
Java EE

JPA

Quête 2 sur 2

Cette quête va te permettre de prendre en main une nouvelle API d'interaction avec une BD : JPA. JPA, ou Java Persistence API est comme son nom l'indique une API te facilitant l'aspect persistence des données en BD.

Objectifs

    • Savoir utiliser JPA pour requêter des données en BD
  • Savoir utiliser JPA pour enregistrer des données en BD

Ressources

Récupérer tes githubers avec JPA

Dans les épisodes précédents: ton appli te permet de tracker et untracker (oui ces mots n'existent pas) les githubers de ton choix, avec un super DAO qui te permet de gérer la persistence des données.

Pour changer, tu vas à présent créer un nouveau "super DAO qui te permet de gérer la persistence des données."

Mais ... avec l'api JPA cette fois-ci et non plus JDBC, histoire de varier les plaisirs. Tu vas donc implémenter une nouvelle version de ton GithuberDAO (comment ça énième?):le JPAGithuberDAO.

Pour ce faire, il te faut :

  • rajouter la dépendance JPA dans ton pom.xml. Par exemple:<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.0.0</version> </dependency>

  • adapter la classe Githuber pour en faire une entité au sens JPA du terme. Elle devrait ressembler à quelque chose comme ça:

shell
@Entity
@Table(name="githuber")
public class Githuber {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name="github_id")
    private Long githubId;
    @Column(name="name")
    private String name;
    @Column(name="email")
    private String email;
    @Column(name="login")
    private String login;
    @Column(name="avatar_url")
    private String avatarUrl;

    public Githuber(){}

    ......

}

  • ajouter un qualifier CDI que tu appelles Jpa

  • créer la classe JPAGithuberDAO qui implémente GithuberDAO et annotée avec le qualifier Jpa La différence principale entre cette nouvelle version du GithuberDAO et la version JDBC est l'utilisation d'un EntityManager pour l'accès aux données, en lieu et place de l'utilisation JDBC.@PersistenceContext private EntityManager em;

Implémente à présent la méthode getGithubers de ton nouveau GithuberDAO. Tu pourras t'attaquer aux autres méthodes par la suite, après avoir valider la configuration JPA.

Une fois implémentée cette méthode, tu peux également injecter ton nouveau DAO dans le service GithuberService en lieu et place de la version JDBC précédente.

Tu as donc une première version de ton nouveau DAO mais, même si l'API JPA simplifie pas mal de choses par rapport à JDBC, elle n'est pas magique pour autant, et demande notamment un minimum de configuration. La configuration principale de JPA est à définir dans un fichier appelé persistence.xml. C'est notamment dans ce fichier que tu vas définir le paramétrage d'accès à la BD. Mais, comme tu l'as vu précédemment dans la version JDBC, la configuration vers la BD est quelque chose qu'il vaut mieux déléguer à ton serveur d'application de manière à rendre ton code indépendant de son environnement d'exécution.

Ainsi, plutôt que de définir les différents paramètres d'accès à la BD directement dans ton fichier persistence.xml, tu vas faire en sorte de réutiliser la datasource JNDI "jdbc/githubtracker" configurée précédemment.

Lance à présent ton application et vérifie que la page /githubers fonctionne correctement.

↗
JPA DAO example
baeldung.com
↗
Wherer to define persistence.xml
stackoverflow.com
↗
JPA Persistence with Datasource
gist.github.com

Challenge

Implémente les méthodes saveGithuber et removeGithuber

Termine à présent ton nouveau DAO en ajoutant l'implémentation des méthodes saveGIthuber et removeGithuber.

Ressources

Critères de validation

    • Ton appli utilise un DAO basé sur JPA pour lister, tracker et untracker les githubers