framework-web:spring:models

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
framework-web:spring:models [2019/02/03 23:37] – créée jcheronframework-web:spring:models [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 2: Ligne 2:
  
 ===== Création du projet ===== ===== Création du projet =====
 +On utilise dans le cadre de cet exemple une base de données embarquée [[http://www.h2database.com/html/main.html|H2Db]].
  
 +Créer un projet en ajoutant les dépendances suivantes :
  
 +{{:framework-web:spring:dep-h2.png?|}}
 ==== Configuration ==== ==== Configuration ====
  
-Modifier le fichier de configuration de l'application Spring pour intégrer H2 :+Modifier le fichier de configuration de l'application Spring pour l'intégration de H2 :
  
 La base de données **dbExemple** est stockée dans le dossier **data**. La base de données **dbExemple** est stockée dans le dossier **data**.
  
 <sxh;title: src/main/resources/application.properties > <sxh;title: src/main/resources/application.properties >
-spring.datasource.url=jdbc:h2:file:./data/dbName;DB_CLOSE_ON_EXIT=FALSE+spring.datasource.url=jdbc:h2:file:./data/dbExemple;DB_CLOSE_ON_EXIT=FALSE
 spring.datasource.username=sa spring.datasource.username=sa
 spring.datasource.password= spring.datasource.password=
Ligne 25: Ligne 27:
 </sxh> </sxh>
  
 +==== Classes ====
 +
 +Soit le diagramme de classes suivant, correspondant à une application de gestion de messagerie :
 +
 +{{:framework-web:spring:classdiagram.png?|}}
 +
 +=== Création d'une Entité ===
 +
 +<sxh java>
 +package s4.spring.td2.models;
 +
 +import javax.persistence.Entity;
 +import javax.persistence.GeneratedValue;
 +import javax.persistence.GenerationType;
 +import javax.persistence.Id;
 +
 +@Entity
 +public class Organization {
 + @Id
 + @GeneratedValue(strategy=GenerationType.AUTO)
 + private int id;
 +
 + private String name;
 + private String domain;
 + private String aliases;
 +}
 +</sxh>
 +
 +__Annotations :__
 +  * @Entity
 +  * [[https://www.objectdb.com/java/jpa/entity/id|@Id]]
 +  * [[https://www.objectdb.com/java/jpa/entity/generated|@GeneratedValue]]
 +
 +=== Création d'un Repository ===
 +
 +<sxh java>
 +public interface OrgaRepository extends JpaRepository<Organization, Integer> {
 +    List<Organization> findByDomain(String domain);
 +    List<Organization> findByName(String name);
 +}
 +
 +</sxh>
 +
 + [[https://docs.spring.io/spring-data/jpa/docs/1.6.0.RELEASE/reference/html/jpa.repositories.html|JPA Repositories]]
 +
 +=== Test d'ajout d'une instance ===
 +Les données sont postées depuis un formulaire contenant les champs name, domain et aliases :
 +
 +<sxh java>
 +@Controller
 +@RequestMapping("/orgas/")
 +public class OrgasController {
 +
 + @Autowired
 + private OrgaRepository repo;
 +
 + @PostMapping("new")
 + @ResponseBody
 + public String newOrga(Organization orga) {
 + repo.saveAndFlush(orga);
 + return orga+" ajoutée.";
 + }
 +}
 +</sxh>
 +
 +==== Relations ====
 +
 +=== ManyToOne ===
 +
 +Chaque groupe appartient à une organisation.
 +
 +<sxh java>
 +@Entity
 +public class Groupe {
 + @Id
 + @GeneratedValue(strategy=GenerationType.AUTO)
 + private int id;
 +
 + @ManyToOne
 + private Organization organization;
 +}
 +</sxh>
 +
 +
 +=== OneToMany ===
 +
 +Chaque organisation possède plusieurs groupes. (la relation est bi-directionnelle dans ce cas)
 +
 +<sxh java>
 +@Entity
 +public class Organization {
 + @Id
 + @GeneratedValue(strategy=GenerationType.AUTO)
 + private int id;
 +
 + private String name;
 + private String domain;
 + private String aliases;
 +
 + @OneToMany(cascade=CascadeType.ALL,mappedBy="organization")
 + private List<Groupe> groupes;
 +}
 +</sxh>
 +
 +=== ManyToMany ===
 +
 +Chaque utilisateur peut appartenir à plusieurs groupes. Dans chaque groupe, on a plusieurs utilisateurs.
 +
 +<sxh java>
 +@Entity
 +public class User {
 + @Id
 + @GeneratedValue(strategy=GenerationType.AUTO)
 + private int id;
 +
 + @ManyToOne
 + private Organization organization;
 +
 + @ManyToMany(mappedBy="users")
 + private List<Groupe> groupes;
 +}
 +</sxh>
 +
 +<sxh java>
 +@Entity
 +public class Groupe{
 + @Id
 + @GeneratedValue(strategy=GenerationType.AUTO)
 + private int id;
 +
 + @ManyToOne
 + private Organization organization;
 +
 + @ManyToMany
 + @JoinTable(name = "user_group")
 + private List<User> users;
 +}
 +</sxh>
  • framework-web/spring/models.1549233472.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)