Monday, December 11, 2017

Spring MVC CRUD

Après avoir vu le traitement du formulaire avec Spring  ici , je vous présente aujourd’hui une petite application qui permet d’ajouter, lire, modifier et supprimer un employe de la base de données. 

Pour débuter, Apres avoir créé un projet maven nommé  SpringMvcCrud.
il faut ajouter les dependencies dans le fichier 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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>training</groupId>
<artifactId>SpringMvcCrud</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpringMvcCrud Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- Specifying the Versions of Spring, Hiberante, MySQL etc -->
<properties>
<spring.version>4.1.5.RELEASE</spring.version>
<hibernate.version>4.3.8.Final</hibernate.version>
<mysql.version>5.1.10</mysql.version>
<junit-version>4.11</junit-version>
<servlet-api-version>3.1.0</servlet-api-version>
<jsp-version>2.1</jsp-version>
<jstl-version>1.2</jstl-version>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Hibernate 4 dependencies -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!--MYSQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Servlet and JSP -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api-version}</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-version}</version>
<scope>provided</scope>
</dependency>
<!-- JSTL dependency -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl-version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>SpringMvcCrud</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
view raw pom.xml hosted with ❤ by GitHub

Voici aussi le fichier de configuration de la base de données:
#Database related properties
database.url=jdbc:mysql://localhost:3306/test
database.user=root
database.password=
database.driver=com.mysql.jdbc.Driver
#hibernate related properties
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true

La classe Employe.java
package com.persistance.model;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Employe implements Serializable{
private int id;
private String name;
private String tel;
private String adress;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
}
view raw Employe .java hosted with ❤ by GitHub

Créer l'interface IEmployeDao
package com.persistance.dao;
import java.util.List;
import com.persistance.model.Employe;
public interface IEmployeDao {
public void add(Employe emp);
public List<Employe> findAll();
public void delete(Employe emp);
public Employe update(Employe emp);
public Employe findById(int id);
}

Créer la classe EmployeDao qui implémente l'interface IEmployeDao
package com.persistance.dao;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.persistance.model.Employe;
@Repository
public class EmployeDao implements IEmployeDao {
@Autowired
SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public void add(Employe emp) {
sessionFactory.getCurrentSession().save(emp);
// TODO Auto-generated method stub
}
@Override
public List<Employe> findAll() {
// TODO Auto-generated method stub
return sessionFactory.getCurrentSession().createQuery("from Employe").list();
}
@Override
public void delete(Employe emp) {
// TODO Auto-generated method stub
sessionFactory.getCurrentSession().delete(emp);
}
@Override
public Employe update(Employe emp) {
// TODO Auto-generated method stub
sessionFactory.getCurrentSession().update(emp);
return emp;
}
@Override
public Employe findById(int id) {
// TODO Auto-generated method stub
return (Employe) sessionFactory.getCurrentSession().get(Employe.class,id);
}
}
view raw EmployeDao.java hosted with ❤ by GitHub

package com.training.service;
import java.util.List;
import com.persistance.model.Employe;
public interface IEmployeService {
public void add(Employe emp);
public void delete(Employe emp);
public List<Employe> findAll();
public Employe update(Employe emp);
public Employe findById(int employeeId);
}

package com.training.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.persistance.dao.IEmployeDao;
import com.persistance.model.Employe;
@Service
@Transactional
public class EmployeService implements IEmployeService {
@Autowired
IEmployeDao employeDao;
@Override
public void add(Employe emp) {
employeDao.add(emp);
// TODO Auto-generated method stub
}
@Override
public void delete(Employe emp) {
// TODO Auto-generated method stub
employeDao.delete(emp);
}
@Override
public List<Employe> findAll() {
// TODO Auto-generated method stub
return employeDao.findAll();
}
@Override
public Employe update(Employe emp) {
// TODO Auto-generated method stub
return employeDao.update(emp);
}
@Override
public Employe findById(int employeeId) {
// TODO Auto-generated method stub
return employeDao.findById(employeeId);
}
}

package com.training.controller;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.persistance.model.Employe;
import com.training.service.IEmployeService;
@Controller
public class EmployeController {
@Autowired
IEmployeService employeService;
@RequestMapping(value = "/")
public ModelAndView listEmploye(ModelAndView model) throws IOException {
List<Employe> listEmploye = employeService.findAll();
model.addObject("listEmploye", listEmploye);
model.setViewName("home");
return model;
}
@RequestMapping(value = "/add", method = RequestMethod.GET)
public ModelAndView add(ModelAndView model) {
Employe emp = new Employe();
model.addObject("emp", emp);
model.setViewName("EmployeForm");
return model;
}
@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute Employe emp) {
employeService.add(emp);
return new ModelAndView("redirect:/");
}
@RequestMapping(value = "/delete", method = RequestMethod.GET)
public ModelAndView delete(HttpServletRequest req) {
int employeeId = Integer.parseInt(req.getParameter("id"));
Employe emp = employeService.findById(employeeId);
employeService.delete(emp);
return new ModelAndView("redirect:/");
}
@RequestMapping(value = "/update", method = RequestMethod.GET)
public ModelAndView update(HttpServletRequest req) {
int employeeId = Integer.parseInt(req.getParameter("id"));
Employe emp = employeService.findById(employeeId);
ModelAndView model = new ModelAndView("EmployeForm");
model.addObject("emp", emp);
return model;
}
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
<!-- Specifying base package of the Components like Controller, Service,
DAO -->
<context:component-scan base-package="com"></context:component-scan>
<!-- Getting Database properties -->
<context:property-placeholder location="classpath:application.properties"/>
<mvc:annotation-driven />
<!-- Specifying the Resource location to load JS, CSS, Images etc -->
<mvc:resources mapping="/resources/**" location="/resources/" />
<!-- View Resolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- DataSource -->
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource"
id="dataSource">
<property name="driverClassName" value="${database.driver}"></property>
<property name="url" value="${database.url}"></property>
<property name="username" value="${database.user}"></property>
<property name="password" value="${database.password}"></property>
</bean>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
</props>
</property>
<property name="packagesToScan" value="com.persistance.model"></property>
</bean>
<!-- Transaction -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>

La page d'ajout EmployeForm.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form:form action="save" method="post" modelAttribute="emp" >
<form:hidden path="id"/>
Name
<form:input path="name"/>
Tel
<form:input path="tel"/>
Adress
<form:input path="adress"/>
<input type="submit" value="Save"/>
</form:form>
</body>
</html>
view raw EmployeForm.jsp hosted with ❤ by GitHub

La page de consultation Home.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<div align="center">
<h1>Employe List</h1>
<table border="1">
<th>Name</th>
<th>tel</th>
<th>adress</th>
<th>Action</th>
<c:forEach var="emp" items="${listEmploye}">
<tr>
<td>${emp.name}</td>
<td>${emp.tel}</td>
<td>${emp.adress}</td>
<td><a href="update?id=${emp.id}">Edit</a>
<a href="delete?id=${emp.id}">delete</a></td>
</tr>
</c:forEach>
</table>
<h4>
New Employee Register <a href="add">here</a>
</h4>
</div>
</body>
</html>
view raw home.jsp hosted with ❤ by GitHub

Il ne faut pas oublier la modification dans le fichier web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</context-param>
</web-app>
view raw web.xml hosted with ❤ by GitHub

Voici une vidéo pour cet exemple:



Code source complet  github

15 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. merci bien pour ce partage,ça reflète ta gentillesse Ramzi

    ReplyDelete
  3. merci ramzi pour votre initiative.

    ReplyDelete
  4. Good work thankssssssss

    ReplyDelete