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