Upload
kokou-gaglo
View
221
Download
2
Embed Size (px)
Citation preview
Pésentation de MyBatis
• un framework léger de persistance
• opère un mapping des résultats des requêtes SQL
avec des objets Java (POJOs)
• personnalisation du mapping
Pésentation de MyBatis
● utilisation de XML ou des annotations pour les
configurations et les mappings (types primitifs)
d'interface en POJOs
● une alternative à JDBC et Hibernate
Hibernate vs MyBatisMyBatis Hibernate
MyBatis utilise du SQL Hibernate utilise du HQL
MyBatis mappe les résultats des requêtes SQL aux objets Java , pas de soucis pour la structure de tables.
Hibernate mappe les objets Java aux tables de la base de données.
C’est facile d’utiliser les procédures stockées
L’utilisation des procédures stockées ajoute de la complexité
Vous ecrivez tout le SQL dont vous avez besoin (même le schéma des tables). Vous gardez ainsi le contrôle sur le SQL qui est exécuté
Génère le SQL pour vous ce qui signifie que vous ne passez pas de temps sur SQL
Le mapping : Structure de la base de données
CREATE TABLE IF NOT EXISTS person ( id BIGINT NOT NULL AUTO_INCREMENT, first_name varchar(50) NOT NULL, last_name varchar(50) NOT NULL, telephone varchar(15), PRIMARY KEY (id));
CREATE TABLE IF NOT EXISTS car ( id BIGINT NOT NULL AUTO_INCREMENT, model varchar(50) NOT NULL, color varchar(50) NOT NULL, person_id int, PRIMARY KEY (id), FOREIGN KEY (person_id) REFERENCES person(id));
Le mapping : les entités
@Datapublic class Car { private Integer id; private String model; private String color; private Person person;}
@Datapublic class Person{ private Integer id; private String firstName; private String lastName; private String telephone; private List<Car> cars;}
Le mapping : les mappers
• Une interface
• Des annotations @Select, @Insert, @Update,
@Delete, ….
• Des requêtes SQL
• Des signatures de méthodes
Le mapping : PersonMapper (1 / 3)
public interface PersonMapper { String INSERT_PERSON = "INSERT INTO person( first_name,last_name,telephone) VALUES(#{firstName},#{lastName},#{telephone})";
String UPDATE = "UPDATE person " + "SET first_name=#{firstName}, last_name=#{lastName},
telephone=#{telephone} WHERE id=#{id}";
String SELECT_ALL ="SELECT * FROM person"; String FIND_BY_ID ="SELECT * FROM person WHERE id=#{id}"; String DELETE ="DELETE FROM person WHERE id=#{id}"; String SELECT_PERSON_CARS ="SELECT * FROM car WHERE person_id=#{id}";
Le mapping : PersonMapper (2 / 3)
@Insert(INSERT_PERSON) @Options(useGeneratedKeys = true) int insert(Person person);
@Select(FIND_BY_ID) @Results(id = "person-cars", value = { @Result(property = "id",column = "id"), @Result(property = "cars",column = "id", javaType = List.class,many = @Many(select = "getPersonCars")) })
Le mapping : PersonMapper (3 / 3)
Person findById(Integer id); @Select(SELECT_PERSON_CARS) List<Car> getPersonCars(Integer id);
@Select(SELECT_ALL) @ResultMap("person-cars") List<Person> selectAll();
@Update(UPDATE) int update(Person person);
@Delete(DELETE) int delete(Integer id);
}
Les dépendances du projet
● mybatis-spring-boot-starter● h2● lombok● spring-boot-starter-test● assertj-core
Documentation
• http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
• http://projects.spring.io/spring-boot/• https://docs.spring.io/spring-boot/docs/current/re
ference/html/boot-features-testing.html• http://www.larousse.fr/dictionnaires/francais/asser
tion/5806