SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
MyBatis, une alternative à JPA
Avec Spring Boot
par James Kokou GAGLO
DevOps @peopleinput
Avril 2017
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 MyBatis
MyBatis 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 : diagramme de classe
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
@Data
public class Car {
private Integer id;
private String model;
private String color;
private Person person;
}
@Data
public 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);
}
Tests unitaires de validation des mappers
● Configuration de l’environnement des tests
Tests unitaires de validation des mappers
● Configuration de l’environnement des tests
Tests unitaires de validation des mappers
● INSERT
Tests unitaires de validation des mappers
● UPDATE
Tests unitaires de validation des mappers
● SELECT ALL
Tests unitaires de validation des mappers
● DELETE
Tests unitaires de validation des mappers
● RELATION ONE TO MANY (Person => Cars)
Tests unitaires de validation des mappers
● RESULTATS
Les dépendances du projet
● mybatis-spring-boot-starter
● h2
● lombok
● spring-boot-starter-test
● assertj-core
Configuration mybatis
Code source
https://github.com/freemanpolys/sp
ring-boot-labs/tree/master/mybatis
Documentation
• http://www.mybatis.org/spring-boot-starter/mybati
s-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

Contenu connexe

Tendances

The Past, Present and Future of Big Data @LinkedIn
The Past, Present and Future of Big Data @LinkedInThe Past, Present and Future of Big Data @LinkedIn
The Past, Present and Future of Big Data @LinkedInSuja Viswesan
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1Federico Campoli
 
Best Practices for Running PostgreSQL on AWS - DAT314 - re:Invent 2017
Best Practices for Running PostgreSQL on AWS - DAT314 - re:Invent 2017Best Practices for Running PostgreSQL on AWS - DAT314 - re:Invent 2017
Best Practices for Running PostgreSQL on AWS - DAT314 - re:Invent 2017Amazon Web Services
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
PostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsPostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsCommand Prompt., Inc
 
Git interview questions | Edureka
Git interview questions | EdurekaGit interview questions | Edureka
Git interview questions | EdurekaEdureka!
 
Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQLJim Mlodgenski
 
MongoDB Backups and PITR
MongoDB Backups and PITRMongoDB Backups and PITR
MongoDB Backups and PITRIgor Donchovski
 
Conhecendo Apache Kafka
Conhecendo Apache KafkaConhecendo Apache Kafka
Conhecendo Apache KafkaRafa Noronha
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL AdministrationEDB
 
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterIntroduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterFrederic Descamps
 
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013Jaime Crespo
 
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...Amazon Web Services Korea
 
RESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWorkRESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWorkJohn Dalsgaard
 
Presto User & Admin Guide
Presto User & Admin GuidePresto User & Admin Guide
Presto User & Admin GuideJEONGPHIL HAN
 
넷플릭스 자유와 책임 문화(Netflix Freedom & responsibility culture) 비속어번역
넷플릭스 자유와 책임 문화(Netflix Freedom & responsibility culture) 비속어번역넷플릭스 자유와 책임 문화(Netflix Freedom & responsibility culture) 비속어번역
넷플릭스 자유와 책임 문화(Netflix Freedom & responsibility culture) 비속어번역DongWoo Son
 
Supersized PostgreSQL: Postgres-XL for Scale-Out OLTP and Big Data Analytics
Supersized PostgreSQL: Postgres-XL for Scale-Out OLTP and Big Data AnalyticsSupersized PostgreSQL: Postgres-XL for Scale-Out OLTP and Big Data Analytics
Supersized PostgreSQL: Postgres-XL for Scale-Out OLTP and Big Data Analyticsmason_s
 
MySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to HaveMySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to HaveSveta Smirnova
 

Tendances (20)

The Past, Present and Future of Big Data @LinkedIn
The Past, Present and Future of Big Data @LinkedInThe Past, Present and Future of Big Data @LinkedIn
The Past, Present and Future of Big Data @LinkedIn
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1
 
Querydsl overview 2014
Querydsl overview 2014Querydsl overview 2014
Querydsl overview 2014
 
Best Practices for Running PostgreSQL on AWS - DAT314 - re:Invent 2017
Best Practices for Running PostgreSQL on AWS - DAT314 - re:Invent 2017Best Practices for Running PostgreSQL on AWS - DAT314 - re:Invent 2017
Best Practices for Running PostgreSQL on AWS - DAT314 - re:Invent 2017
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
PostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsPostgreSQL Administration for System Administrators
PostgreSQL Administration for System Administrators
 
Git interview questions | Edureka
Git interview questions | EdurekaGit interview questions | Edureka
Git interview questions | Edureka
 
Introduction to PostgreSQL
Introduction to PostgreSQLIntroduction to PostgreSQL
Introduction to PostgreSQL
 
MongoDB Backups and PITR
MongoDB Backups and PITRMongoDB Backups and PITR
MongoDB Backups and PITR
 
Conhecendo Apache Kafka
Conhecendo Apache KafkaConhecendo Apache Kafka
Conhecendo Apache Kafka
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterIntroduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
 
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
Query Optimization with MySQL 5.6: Old and New Tricks - Percona Live London 2013
 
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
쿠키런: 킹덤 대규모 인프라 및 서버 운영 사례 공유 [데브시스터즈 - 레벨 200] - 발표자: 용찬호, R&D 엔지니어, 데브시스터즈 ...
 
RESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWorkRESTful services on IBM Domino/XWork
RESTful services on IBM Domino/XWork
 
Presto User & Admin Guide
Presto User & Admin GuidePresto User & Admin Guide
Presto User & Admin Guide
 
넷플릭스 자유와 책임 문화(Netflix Freedom & responsibility culture) 비속어번역
넷플릭스 자유와 책임 문화(Netflix Freedom & responsibility culture) 비속어번역넷플릭스 자유와 책임 문화(Netflix Freedom & responsibility culture) 비속어번역
넷플릭스 자유와 책임 문화(Netflix Freedom & responsibility culture) 비속어번역
 
Supersized PostgreSQL: Postgres-XL for Scale-Out OLTP and Big Data Analytics
Supersized PostgreSQL: Postgres-XL for Scale-Out OLTP and Big Data AnalyticsSupersized PostgreSQL: Postgres-XL for Scale-Out OLTP and Big Data Analytics
Supersized PostgreSQL: Postgres-XL for Scale-Out OLTP and Big Data Analytics
 
MySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to HaveMySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to Have
 
Practical Object Oriented Models In Sql
Practical Object Oriented Models In SqlPractical Object Oriented Models In Sql
Practical Object Oriented Models In Sql
 

Similaire à MyBatis, une alternative à JPA.

[MAP-MEEDM] Présentation Spatial Data Integrator
[MAP-MEEDM] Présentation Spatial Data Integrator[MAP-MEEDM] Présentation Spatial Data Integrator
[MAP-MEEDM] Présentation Spatial Data Integratormathieuraj
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database ConnectivityKorteby Farouk
 
introduction au SQL et MySQL
introduction au SQL et MySQLintroduction au SQL et MySQL
introduction au SQL et MySQLAbdoulaye Dieng
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity frameworkDNG Consulting
 
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usagesPostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usagesOpen Source Experience
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un bliantareq
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilanteejug
 
xml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.pptxml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.pptLeilaAmrane
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
Slides de la Localisation
Slides de la LocalisationSlides de la Localisation
Slides de la LocalisationCocoaHeads.fr
 
Le web mapping pour tous
Le web mapping pour tousLe web mapping pour tous
Le web mapping pour tousLoïc Haÿ
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfRihabBENLAMINE
 
Softshake 2013 Apiness SA l'envers du décor
Softshake 2013 Apiness SA l'envers du décorSoftshake 2013 Apiness SA l'envers du décor
Softshake 2013 Apiness SA l'envers du décormichaelmiguel2013
 
Softshake apiness l'envers du décor
Softshake apiness l'envers du décorSoftshake apiness l'envers du décor
Softshake apiness l'envers du décorApinessSA
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big DataJournées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big DataDavid Joubert
 

Similaire à MyBatis, une alternative à JPA. (20)

[MAP-MEEDM] Présentation Spatial Data Integrator
[MAP-MEEDM] Présentation Spatial Data Integrator[MAP-MEEDM] Présentation Spatial Data Integrator
[MAP-MEEDM] Présentation Spatial Data Integrator
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
 
introduction au SQL et MySQL
introduction au SQL et MySQLintroduction au SQL et MySQL
introduction au SQL et MySQL
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity framework
 
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usagesPostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
PostgreSQL, plus qu'une base de données, une plateforme aux multiples usages
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilan
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Presentation JPA
Presentation JPAPresentation JPA
Presentation JPA
 
Adopte une BDD
Adopte une BDDAdopte une BDD
Adopte une BDD
 
xml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.pptxml_bd_ouahdikrid.ppt
xml_bd_ouahdikrid.ppt
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
Slides de la Localisation
Slides de la LocalisationSlides de la Localisation
Slides de la Localisation
 
Le web mapping pour tous
Le web mapping pour tousLe web mapping pour tous
Le web mapping pour tous
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdf
 
La 2ème partie de la présentation PHP
La 2ème partie de la présentation PHPLa 2ème partie de la présentation PHP
La 2ème partie de la présentation PHP
 
Softshake 2013 Apiness SA l'envers du décor
Softshake 2013 Apiness SA l'envers du décorSoftshake 2013 Apiness SA l'envers du décor
Softshake 2013 Apiness SA l'envers du décor
 
Softshake apiness l'envers du décor
Softshake apiness l'envers du décorSoftshake apiness l'envers du décor
Softshake apiness l'envers du décor
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big DataJournées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
 

Plus de Kokou Gaglo

Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de JhipsterKokou Gaglo
 
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)Kokou Gaglo
 
Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Kokou Gaglo
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsKokou Gaglo
 
Contributions aux environnements de développement de services de télécoms da...
Contributions aux environnements de développement de  services de télécoms da...Contributions aux environnements de développement de  services de télécoms da...
Contributions aux environnements de développement de services de télécoms da...Kokou Gaglo
 
Mise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMSMise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMSKokou Gaglo
 
Programmation evénementielle
Programmation evénementielleProgrammation evénementielle
Programmation evénementielleKokou Gaglo
 

Plus de Kokou Gaglo (11)

Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de Jhipster
 
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
 
Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
 
Java - Lombok
Java - LombokJava - Lombok
Java - Lombok
 
Contributions aux environnements de développement de services de télécoms da...
Contributions aux environnements de développement de  services de télécoms da...Contributions aux environnements de développement de  services de télécoms da...
Contributions aux environnements de développement de services de télécoms da...
 
Design pattern
Design patternDesign pattern
Design pattern
 
Mise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMSMise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMS
 
Serveur http
Serveur httpServeur http
Serveur http
 
Programmation evénementielle
Programmation evénementielleProgrammation evénementielle
Programmation evénementielle
 

MyBatis, une alternative à JPA.

  • 1. MyBatis, une alternative à JPA Avec Spring Boot par James Kokou GAGLO DevOps @peopleinput Avril 2017
  • 2. 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
  • 3. 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
  • 4. Hibernate vs MyBatis MyBatis 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
  • 5. Le mapping : diagramme de classe
  • 6. 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));
  • 7. Le mapping : les entités @Data public class Car { private Integer id; private String model; private String color; private Person person; } @Data public class Person{ private Integer id; private String firstName; private String lastName; private String telephone; private List<Car> cars; }
  • 8. Le mapping : les mappers • Une interface • Des annotations @Select, @Insert, @Update, @Delete, …. • Des requêtes SQL • Des signatures de méthodes
  • 9. 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}";
  • 10. 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")) } )
  • 11. 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); }
  • 12. Tests unitaires de validation des mappers ● Configuration de l’environnement des tests
  • 13. Tests unitaires de validation des mappers ● Configuration de l’environnement des tests
  • 14. Tests unitaires de validation des mappers ● INSERT
  • 15. Tests unitaires de validation des mappers ● UPDATE
  • 16. Tests unitaires de validation des mappers ● SELECT ALL
  • 17. Tests unitaires de validation des mappers ● DELETE
  • 18. Tests unitaires de validation des mappers ● RELATION ONE TO MANY (Person => Cars)
  • 19. Tests unitaires de validation des mappers ● RESULTATS
  • 20. Les dépendances du projet ● mybatis-spring-boot-starter ● h2 ● lombok ● spring-boot-starter-test ● assertj-core
  • 23. Documentation • http://www.mybatis.org/spring-boot-starter/mybati s-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