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
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}";