diff --git a/example.sql b/example.sql
new file mode 100644
index 0000000..5ceef6a
--- /dev/null
+++ b/example.sql
@@ -0,0 +1,9 @@
+create table FILM
+(
+    id          int auto_increment
+        primary key,
+    name        varchar(248) not null,
+    description text         not null,
+    date        datetime     not null,
+    duration    float        not null
+);
diff --git a/pom.xml b/pom.xml
index 6b32426..8272cae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,14 +17,15 @@
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <maven.compiler.source>1.7</maven.compiler.source>
     <maven.compiler.target>1.7</maven.compiler.target>
-    <resteasy-version>3.0.10.Final</resteasy-version>
+    <resteasy-version>3.15.3.Final</resteasy-version>
+    <slf4j-version>1.7.36</slf4j-version>
   </properties>
 
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>4.11</version>
+      <version>4.13.2</version>
       <scope>test</scope>
     </dependency>
     <!-- JBoss -->
@@ -43,6 +44,37 @@
       <artifactId>resteasy-multipart-provider</artifactId>
       <version>${resteasy-version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.hibernate</groupId>
+      <artifactId>hibernate-core</artifactId>
+      <version>5.6.7.Final</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>${slf4j-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <version>${slf4j-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.mariadb.jdbc</groupId>
+      <artifactId>mariadb-java-client</artifactId>
+      <version>3.0.3</version>
+    </dependency>
+    <dependency>
+      <groupId>org.projectlombok</groupId>
+      <artifactId>lombok</artifactId>
+      <version>1.18.22</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.code.gson</groupId>
+      <artifactId>gson</artifactId>
+      <version>2.9.0</version>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/src/main/java/fr/univ/lyon1/iut/Resource.java b/src/main/java/fr/univ/lyon1/iut/controllers/AdminController.java
similarity index 80%
rename from src/main/java/fr/univ/lyon1/iut/Resource.java
rename to src/main/java/fr/univ/lyon1/iut/controllers/AdminController.java
index d69e123..8ddcf7e 100644
--- a/src/main/java/fr/univ/lyon1/iut/Resource.java
+++ b/src/main/java/fr/univ/lyon1/iut/controllers/AdminController.java
@@ -1,11 +1,11 @@
-package fr.univ.lyon1.iut;
+package fr.univ.lyon1.iut.controllers;
 
 import javax.ws.rs.*;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 
-@Path("/api")
-public class Resource {
+@Path("/admin")
+public class AdminController {
     @GET
     @Path("/isAlive")
     public Response isAlive() {
diff --git a/src/main/java/fr/univ/lyon1/iut/controllers/FilmController.java b/src/main/java/fr/univ/lyon1/iut/controllers/FilmController.java
new file mode 100644
index 0000000..36bf2f0
--- /dev/null
+++ b/src/main/java/fr/univ/lyon1/iut/controllers/FilmController.java
@@ -0,0 +1,58 @@
+package fr.univ.lyon1.iut.controllers;
+
+import com.google.gson.Gson;
+import fr.univ.lyon1.iut.models.Film;
+import fr.univ.lyon1.iut.models.ManageFilm;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Request;
+import javax.ws.rs.core.Response;
+
+@Path("/film")
+public class FilmController {
+    @GET
+    @Path("/")
+    public Response getFilm() {
+        ManageFilm mf = new ManageFilm();
+        return Response.ok(new Gson().toJson(mf.getFilms()), MediaType.APPLICATION_JSON).build();
+    }
+
+    @POST
+    @Path("/")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response addFilm(Film f) {
+        f.setId(null);
+        try {
+            ManageFilm mf = new ManageFilm();
+            return Response.ok(mf.addFilm(f), MediaType.APPLICATION_JSON).build();
+        } catch (Exception e) {
+            return Response.serverError().build();
+        }
+    }
+
+    @PUT
+    @Path("/")
+    @Consumes(MediaType.APPLICATION_JSON)
+    public Response updateFilm(Film f) {
+        try {
+            ManageFilm mf = new ManageFilm();
+            mf.updateFilm(f);
+            return Response.ok("ok").build();
+        } catch (Exception e) {
+            return Response.serverError().build();
+        }
+    }
+
+    @DELETE
+    @Path("/")
+    public Response deleteFilm(Film f) {
+        try {
+            ManageFilm mf = new ManageFilm();
+            mf.deleteFilm(f);
+            return Response.ok("ok").build();
+        } catch (Exception e) {
+            return Response.serverError().build();
+        }
+    }
+}
diff --git a/src/main/java/fr/univ/lyon1/iut/models/Film.java b/src/main/java/fr/univ/lyon1/iut/models/Film.java
new file mode 100644
index 0000000..2890315
--- /dev/null
+++ b/src/main/java/fr/univ/lyon1/iut/models/Film.java
@@ -0,0 +1,52 @@
+package fr.univ.lyon1.iut.models;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
+@Entity
+@Table(name = "FILM")
+public class Film implements Serializable {
+    @Id
+    @GeneratedValue(generator = "increment")
+    @GenericGenerator(name="increment", strategy = "increment")
+    @Getter
+    @Setter
+    private Long id;
+
+    @Column(name = "name")
+    @Getter
+    @Setter
+    private String name;
+
+    @Column(name = "description")
+    @Getter
+    @Setter
+    private String description;
+
+    @Column(name = "date")
+    @Temporal(TemporalType.TIMESTAMP)
+    @Getter
+    @Setter
+    private Date date;
+
+    @Column(name = "duration")
+    @Getter
+    @Setter
+    private long duration;
+
+    public Film(String name, String description, Date date, long duration) {
+        this.name = name;
+        this.description = description;
+        this.date = date;
+        this.duration = duration;
+    }
+
+    public Film() {
+
+    }
+}
diff --git a/src/main/java/fr/univ/lyon1/iut/models/ManageFilm.java b/src/main/java/fr/univ/lyon1/iut/models/ManageFilm.java
new file mode 100644
index 0000000..e5dc7a1
--- /dev/null
+++ b/src/main/java/fr/univ/lyon1/iut/models/ManageFilm.java
@@ -0,0 +1,102 @@
+package fr.univ.lyon1.iut.models;
+
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.service.ServiceRegistry;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ManageFilm {
+    private static SessionFactory sessionFactory;
+
+    public ManageFilm() {
+        try {
+            Configuration configuration = new Configuration();
+            configuration.configure();
+            configuration.addAnnotatedClass(Film.class);
+            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
+            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
+        } catch (Throwable th) {
+            System.err.println("Enitial SessionFactory creation failed" + th);
+            throw new ExceptionInInitializerError(th);
+        }
+    }
+
+    public Long addFilm(Film film) {
+        Session session = sessionFactory.openSession();
+        Transaction tx = null;
+        Long filmID = null;
+
+        try {
+            tx = session.beginTransaction();
+            filmID = (Long) session.save(film);
+            tx.commit();
+        } catch (HibernateException e) {
+            if (tx!=null) tx.rollback();
+            e.printStackTrace();
+        } finally {
+            session.close();
+        }
+        return filmID;
+    }
+
+    public List<Film> getFilms() {
+        Session session = sessionFactory.openSession();
+        List<Film> films = null;
+
+        try {
+            films = session.createQuery("FROM Film", Film.class).list();
+        } catch (HibernateException e) {
+            e.printStackTrace();
+        } finally {
+            session.close();
+        }
+        return films;
+    }
+
+    public boolean updateFilm(Film film) {
+        Session session = sessionFactory.openSession();
+        Transaction tx = null;
+        boolean result;
+
+        try {
+            tx = session.beginTransaction();
+            session.merge(film);
+            tx.commit();
+            result = true;
+        } catch (HibernateException e) {
+            if (tx!=null) tx.rollback();
+            e.printStackTrace();
+            result = false;
+        } finally {
+            session.close();
+        }
+        return result;
+    }
+
+    public boolean deleteFilm(Film film) {
+        Session session = sessionFactory.openSession();
+        Transaction tx = null;
+        boolean result;
+
+        try {
+            tx = session.beginTransaction();
+            session.delete(film);
+            tx.commit();
+            result = true;
+        } catch (HibernateException e) {
+            if (tx!=null) tx.rollback();
+            e.printStackTrace();
+            result = false;
+        } finally {
+            session.close();
+        }
+        return result;
+    }
+}
diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml
new file mode 100644
index 0000000..8bfcb25
--- /dev/null
+++ b/src/main/resources/hibernate.cfg.xml
@@ -0,0 +1,29 @@
+<?xml version = "1.0" encoding = "utf-8"?>
+<!DOCTYPE hibernate-configuration SYSTEM
+        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
+<hibernate-configuration>
+    <session-factory>
+
+        <property name = "hibernate.dialect">
+            org.hibernate.dialect.MariaDBDialect
+        </property>
+
+        <property name = "hibernate.connection.driver_class">
+            org.mariadb.jdbc.Driver
+        </property>
+
+        <!-- Assume test is the database name -->
+
+        <property name = "hibernate.connection.url">
+            jdbc:mariadb://localhost:3306/filmflix
+        </property>
+
+        <property name = "hibernate.connection.username">
+            filmflix
+        </property>
+
+        <property name = "hibernate.connection.password">
+            filmflix
+        </property>
+    </session-factory>
+</hibernate-configuration>
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 4f55962..9032602 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -3,17 +3,13 @@
         "http://java.sun.com/dtd/web-app_2_3.dtd" >
 <web-app>
   <display-name>Archetype Created Web Application</display-name>
-  <!--<context-param>
-  <param-name>resteasy.scan</param-name>
-  <param-value>true</param-value>
-  </context-param> -->
   <context-param>
     <param-name>resteasy.resources</param-name>
-    <param-value>fr.univ.lyon1.iut.Resource</param-value>
+    <param-value>fr.univ.lyon1.iut.controllers.AdminController,fr.univ.lyon1.iut.controllers.FilmController</param-value>
   </context-param>
   <context-param>
     <param-name>resteasy.servlet.mapping.prefix</param-name>
-    <param-value>/service</param-value>
+    <param-value>/api</param-value>
   </context-param>
   <listener>
     <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
@@ -24,6 +20,6 @@
   </servlet>
   <servlet-mapping>
     <servlet-name>api</servlet-name>
-    <url-pattern>/service/*</url-pattern>
+    <url-pattern>/api/*</url-pattern>
   </servlet-mapping>
 </web-app>