Fabien Coelho
MINES ParisTech
fabien.coelho@mines-paristech.fr
Compos´
e avec L
A
T
E
X
Fabien Coelho JAVA : ORM – Object-Relational Mapping
ORM – Object-Relational Mapping
programme objet & stockage relationnel
ORM – Object-Relational Mapping 2
Fabien Coelho JAVA : ORM – Object-Relational Mapping
Concepts : objets vs relations
— donn´
ees + fonctions
— programmation
langage proc´
edural
typage fort, statique/dynamique
classe, encapsulation
listes, ensembles, tableaux
— r´
ef´
erence/pointeurs
— h´
eritage
— lev´
ee d’exceptions, `
a l’ex´
ecution
modifications locales
— donn´
ees + contraintes
— d´
eclaration
— alg`
ebre relationnelle
typage fort
...mais pas les mˆ
emes types
relation, tuples `
a plat (struct ?)
scalaire et relations...
— associations
— h´
eritage possible (mod`
ele OR)
contraintes d’int´
egrit´
e d´
eclar´
ees
transactions globales
ORM – Object-Relational Mapping 3
Fabien Coelho JAVA : ORM – Object-Relational Mapping
ORM - op´
erations
(S)CRUD (Search) Create, Read, Update, Delete
code ORM tr`
es similaire, tr`
es r´
ep´
etitif, tr`
es sp´
ecifique
G´
en´
eration automatique de code : portabilit ´
e
3 strat´
egies
1. Relationnel vers objet
2. Objet vers relationnel
3. Description vers relationnel et objet
Java JPA, Hibernate, iBATIS, MyBatis
Scala Squeryl, SORM, (Anorm)
Python Django, SQLAlchemy
Ruby Active Records, RBATIS
.NET NHibernate, iBATIS
ORM – Object-Relational Mapping 4
Fabien Coelho JAVA : ORM – Object-Relational Mapping
Approche
— s´
eparation code application / lien base de donn´
ee
couche d’abstraction qui cache JDBC et SQL
philosophie base POJO : Plain Old Java Object
vs objects contraints (h´
eritage, m´
ethode)
— d´
eclaration via XML ou annotations. . .
g´
en´
eration code Java & SQL, ou introspection. . .
efficacit´
e SQL ? en g´
en´
eral, non :
pourquoi une requˆ
ete avec 100 r ´
esultats si je peux faire 100 requˆ
etes ?
services : connexion, cache (policies), pooling, prefetch. . .
persistence automatique ou `
a la demande
ORM – Object-Relational Mapping 5
Fabien Coelho JAVA : ORM – Object-Relational Mapping
MyBatis – SQL Mapping Framework for Java
— bas´
e sur Apache iBATIS, fork en 2010 http://mybatis.org
il existe aussi une version .Net
fichiers XML pour l’environnement et les mappings
contrˆ
ole complet des requˆ
etes (appels de proc´
edures. . .)
support SQL dynamique : variantes de requ ˆ
etes
´
eventuellement sp´
ecifi´
e avec des annotations
utilisation par un runtime
lecture fichiers XML
configuration connexion et d´
efinition des tables/objets
appel explicite des requˆ
etes
ORM – Object-Relational Mapping 6
Fabien Coelho JAVA : ORM – Object-Relational Mapping
doc MyBatis
ORM – Object-Relational Mapping 7
Fabien Coelho JAVA : ORM – Object-Relational Mapping
MyBatis – fichier XML
<sqlMap namespace="StudentMapper">
<!-- correspondance des attributs -->
<resultMap id="studentResult" class="Student">
<result property="id" column="pk"/>
<result property="name" column="nom"/>
</resultMap>
<select id="allStudents" resultMap="studentResult">
SELECT *FROM Student
</select>
<select id="studentById" parameterClass="int" resultClass="Student">
SELECT ... FROM Student WHERE pk = #{id}
</select>
<insert id="insertStudent" parameterClass="Student">
INSERT INTO Student(pk,nom) VALUES(#{id}, #{name});
</insert>
<update id="updateStudent" parameterClass="Student">
UPDATE Student SET nom=#name# WHERE pk=#{id}
</update>
<delete id="deleteStudent" parameterClass="int">
DELETE FROM Student WHERE pk=#{id}
</delete>
</sqlMap>
ORM – Object-Relational Mapping 8
Fabien Coelho JAVA : ORM – Object-Relational Mapping
MyBatis – Java annot ´
e
— plutˆ
ot pour des requˆ
etes assez simples
public interface StudentMapper
{
@Select("SELECT *FROM Student WHERE pk=#{id}")
Student selectStudent(int id);
@Insert("INSERT INTO Student(pk,nom) VALUES(#{id},#{name})")
@Options(useCache=true,flushCache=true,keyProperty="pk")
void insertStudent(Student s);
// etc.
}
ORM – Object-Relational Mapping 9
Fabien Coelho JAVA : ORM – Object-Relational Mapping
MyBatis – code Java
SqlSession session = ...("student.xml");
StudentMapper sm = session.getMapper(StudentMapper.class);
List<Student> ls = sm.allStudents();
Student s = sm.studentById(12);
s.setNom("Calvin");
sm.updateStudent(s);
session.close();
ORM – Object-Relational Mapping 10
Fabien Coelho JAVA : ORM – Object-Relational Mapping
MyBatis Generator
— d´
erivation des classes et requˆ
etes
`
a partir du sch ´
ema de la base de donn´
ees
DAO Data Access Object par table
´
eventuellement, construction d’objets au dessus
requˆ
etes plus complexes impliquant des jointures. . .
Ne jamais modifier du code g´
en´
er´
e automatiquement !
ORM – Object-Relational Mapping 11
Fabien Coelho JAVA : ORM – Object-Relational Mapping
JPA – Java Persistence API
Standard Java 5.0, package javax.persistence
utilise des annotations Java. . .
impl´
ementations OpenJDA (Apache), Hibernate (Red Hat)
ORM – Object-Relational Mapping 12
Fabien Coelho JAVA : ORM – Object-Relational Mapping
Red Hat – Hibernate
similaire `
a MyBatis, mais SQL plutˆ
ot g´
en´
er´
e. . .
possibilit´
e de r´
e-´
ecrire les requ ˆ
etes trop inefficaces
est un JPA provider
— int´
egr´
e`
a JBoss – impl´
ementation J2EE Red Hat
ORM – Object-Relational Mapping 13
Fabien Coelho JAVA : ORM – Object-Relational Mapping
Comparaison rapide
MyBatis simple, souple, SQL donc sp´
ecifique, contrˆ
ole
Hibernate standard, complet, rigide, portable mais HQL, communaut ´
e
ORM – Object-Relational Mapping 14
Fabien Coelho JAVA : ORM – Object-Relational Mapping
Philosophies
Domaine application OO, DB simple stockage OO >DB
une seule application
— donn´
ees non partag ´
ees entre applications
— int´
egrit´
e assur´
ee par l’application
MySQL, Hibernate
Base de donn´
ees a les donn´
ees, utilis´
ee en OO DB >OO
applications multiples
— donn´
ees partag ´
ees
— int´
egrit´
e assur´
ee par la DB
PostgreSQL, MyBatis
ORM – Object-Relational Mapping 15
List of Slides
Titre
2 ORM – Object-Relational Mapping
ORM – Object-Relational Mapping
3 Concepts : objets vs relations
4 ORM - op´
erations
4 G´
en´
eration automatique de code : portabilit ´
e
5 Approche
6 MyBatis – SQL Mapping Framework for Java
8 MyBatis – fichier XML
9 MyBatis – Java annot ´
e
10 MyBatis – code Java
11 MyBatis Generator
12 JPA – Java Persistence API
13 Red Hat – Hibernate
14 Comparaison rapide
15 Philosophies
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !