Site de E-commerce en java EE avec Spring Framework – Partie 1

Introduction

Dans cet article je vais décrire les étapes pour créer un site web de commerce électronique qui se compose de deux parties :

  • une partie back office qui nécessite une authentification mais aussi qui permet de gérer les catégories et les produits. Nous définissions deux rôles pour cette partie :
    • ROLE_ADMIN_CAT : l’utilisateur ayant ce rôle a la possibilité de gérer les catégories et les produits (ajout, suppression, modification, consultation) ainsi que les droits d’accès.
    • ROLE_ADMIN_PROD : l’utilisateur ayant ce rôle a uniquement la possibilité de gérer les produits(ajout, suppression, modification, consultation.
  • une partie front office qui représente la boutique virtuelle et qui ne nécessite pas d’authentification. Dans cette partie l’utilisateur ( l’internaute ) a la possibilité de :
    • consulter toutes les catégories
    • consulter les produits d’une catégorie
    • consulter les produits sélectionnés
    • chercher des produits par mots clé
    • ajout un produit au panier avec une quantité
    • supprimer un produit du panier
    • enregistrer le client et la commande de son panier

 

Architecture du système

L’architecture du système est définie par le schéma suivant :

image

 

Modélisation du système avec UML

1. Diagramme de cas d’utilisation ( “Use Case”) :

image

2. Diagramme de classe des entités

 

image

3. Diagramme de classe des traitements

 

image

Développement du système

Technologies et outils  utilisés :

  • Eclipse version Java EE  + plugin Spring tools Suite ( cf eclipse market )
  • Spring Core , Spring Transaction, Spring ORM
  • Spring MVC
  • Hibernate
  • MySql
  • Tomcat

 

1. Création d’un projet Spring MVC

Principe de fonctionnement de Spring MVC :

image

Création du projet dans Eclipse :

imageimage

Voici la structure de base du projet que vous devez obtenir :

image

Explication du fonctionnement du projet avec Tomcat sous la forme  d’un diagramme de séquence :

image

Création des entités ( cf diagramme de classe de entités ) :

image

Ajout des dépendances Hibernate et MySql dans le fichier pom.xml :

 

<!-- Hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.1.0.Final</version>
</dependency>

<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>

 

Ajout des annotations JPA et Hibernate validator(@NotEmpty) sur les entités :

package com.mycompany.eboutique.entities;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
public class Produit implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idProduit;
@NotEmpty
@Size(min=4,max=15)
private String description;
private String designation;
private double prix;
private int quantite;
private boolean selected;
private String photo;
@ManyToOne
@JoinColumn(name="idCategorie")
private Categorie categorie;

 

Création du fichier persistence.xml avec les caractéristiques suivantes  :

 

<?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="UP_BOUTIQUE" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
</persistence>

 

Configuration de JPA :

image

Pour ce faire nous allons ajouter les dépendances suivantes dans le pom.xml :

<!-- Spring  gestion transaction-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>

<!-- Spring  gestion orm = hibernate -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version>
</dependency>

<!-- Spring  gestion des beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${org.springframework-version}</version>
</dependency>

<!-- Spring  Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${org.springframework-version}</version>
</dependency>

 

 

Création d’un fichier de configuration Spring dans les ressources :

image

image

Contenu du fichier applicationContext.xml :

La partie datasource :

 

image

La partie persistance :

image

Création de la base de données :

Utilisation du MySQL Workbench  :

image

image

Création d’un test unitaire pour créer la structure de la base :

 

image

Une fois les erreurs du test corrigées , la base de données et ses tables sont crées :

image

image

Création de l’interface IBoutiqueDao et son implémentation IBoutiqueDaoImpl :

package com.mycompany.eboutique.entities.dao;

import java.util.List;

import com.mycompany.eboutique.entities.Categorie;
import com.mycompany.eboutique.entities.Client;
import com.mycompany.eboutique.entities.Commande;
import com.mycompany.eboutique.entities.Panier;
import com.mycompany.eboutique.entities.Produit;
import com.mycompany.eboutique.entities.Role;
import com.mycompany.eboutique.entities.User;

public interface IBoutiqueDao {

public Long ajouterCategorie(Categorie c);
public List<Categorie> listCategories();
public Categorie getCategorie(Long idCat);
public void modifierCategorie(Categorie c);
public void supprimerCategorie(Long idCat);

public Long ajouterProduit(Produit p , Long idCat );
public List<Produit> listProduits();
public List<Produit> produitsParMotCle(String mc);
public List<Produit> produitsParCategories(Long idCat);
public List<Produit> produitsSelectionnes();
public Produit getProduit(Long idP);
public void modiferProduit(Produit p);
public void supprimerProduit(Long idProduit);

public void ajouterUser(User u);
public void attribuerRole(Role r, Long userID);
public Commande enregistrerCommande(Panier p, Client cl);
}

et la deuxième classe :

 

package com.mycompany.eboutique.entities.dao;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.mycompany.eboutique.entities.Categorie;
import com.mycompany.eboutique.entities.Client;
import com.mycompany.eboutique.entities.Commande;
import com.mycompany.eboutique.entities.LigneCommande;
import com.mycompany.eboutique.entities.Panier;
import com.mycompany.eboutique.entities.Produit;
import com.mycompany.eboutique.entities.Role;
import com.mycompany.eboutique.entities.User;

public class BoutiqueDaoImpl implements IBoutiqueDao{

@PersistenceContext
private EntityManager em;

@Override
public Long ajouterCategorie(Categorie c) {
em.persist(c);
return c.getIdCategorie();
}

@Override
public List<Categorie> listCategories() {
Query req= em.createQuery("select c from Categorie c");
return req.getResultList();

}

@Override
public Categorie getCategorie(Long idCat) {
return em.find(Categorie.class, idCat);
}

@Override
public void modifierCategorie(Categorie c) {
em.merge(c);

}

@Override
public void supprimerCategorie(Long idCat) {
Categorie c=em.find(Categorie.class, idCat);
em.remove(c);

}

@Override
public Long ajouterProduit(Produit p, Long idCat) {
Categorie c=getCategorie(idCat);
p.setCategorie(c);
em.persist(p);
return p.getIdProduit();
}

@Override
public List<Produit> listProduits() {
Query req= em.createQuery("select p from Produit p");
return req.getResultList();
}

@Override
public List<Produit> produitsParMotCle(String mc) {
Query req= em.createQuery("select p from Produit p where p.designation like 😡 or p.description like :x");
req.setParameter("x", "%"+mc+"%");
return req.getResultList();
}

@Override
public List<Produit> produitsParCategories(Long idCat) {
Query req= em.createQuery("select p from Produit p where p.categorie.idcategorie=:x");
req.setParameter("x", idCat);
return req.getResultList();
}

@Override
public List<Produit> produitsSelectionnes() {
Query req= em.createQuery("select p from Produit p where p.selected=true");
return req.getResultList();
}

@Override
public Produit getProduit(Long idP) {
Produit p =em.find(Produit.class, idP);
return p;
}

@Override
public void modiferProduit(Produit p) {
em.merge(p);

}

@Override
public void supprimerProduit(Long idP) {
Produit p=getProduit(idP);
em.remove(p);
}

@Override
public void ajouterUser(User u) {
em.persist(u);

}

@Override
public void attribuerRole(Role r, Long userID) {
User u=em.find(User.class, userID);
u.getRoles().add(r);
em.persist(u);
}

@Override
public Commande enregistrerCommande(Panier p, Client cl) {
em.persist(cl);
Commande cmd=new Commande();
cmd.setDateCommande(new Date());
cmd.setItems(p.getItems());
for(LigneCommande lc : p.getItems())
{
em.persist(lc);
}
em.persist(cmd);
return cmd;

}
}

Nous verrons dans le prochain article la création des interfaces métier.

 

[otw_is sidebar=otw-sidebar-2]

0 responses on "Site de E-commerce en java EE avec Spring Framework - Partie 1"

Leave a Message

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

© WayofCode. All rights reserved.

Setup Menus in Admin Panel