You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _posts/2012-05-09-ormlite-pour-android.markdown
+33-4Lines changed: 33 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,4 +1,4 @@
1
-
---
1
+
---
2
2
layout: post
3
3
title: ORMLite pour Android
4
4
author: dst17
@@ -16,6 +16,7 @@ Dans le cadre de mon étude des divers frameworks pour le développement java su
16
16
# L'utilisation d'ORMLite
17
17
18
18
## Annoter son modèle
19
+
19
20
En Android natif, les objets de notre modèle sont de simples POJO tels que :
20
21
21
22
{% highlight java %}
@@ -111,6 +112,7 @@ Nous pouvons également déclarer des relations entre objets du modèle :
111
112
{% endhighlight %}
112
113
113
114
Quelques points négatifs sur les relations :
115
+
114
116
- par défaut, les objets étrangers ne sont pas requêtés, seul l'id est renseigné dans un objet vide (par exemple, pour un object User, l'object Account aura seulement son id de renseigné). Il est quand même possible d'activer la mise à jour automatique des objets étrangers (voir le [foreignAutoRefresh](http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#ANC6)).
115
117
- pas moyen de préciser l'ordre de tri de la collection quand elle est retournée (certes il est possible de le faire programatiquement mais le faire en SQL aurait été beaucoup plus simple et rapide). Il est également possible d'utiliser le DAO pour mettre à jour cet objet :
116
118
@@ -122,7 +124,9 @@ La gestion des relations entre objets est une des bases d'un ORM et c'est un vra
122
124
123
125
124
126
## Les DAO
127
+
125
128
ORMLite s'occupe du cycle de vie des DAO :
129
+
126
130
- la création via le DaoManager
127
131
- une fois créés, ils sont réutilisés car leur création est une opération côuteuse
128
132
@@ -191,11 +195,11 @@ Un dernier petit détail : il est possible d'activer un cache au niveau des DAO
191
195
{% endhighlight %}
192
196
193
197
## Les transactions
198
+
194
199
ORMLite fournit un mécanisme de transactions simple (voir la [doc](http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_5.html#SEC52)) :
195
-
// we need the final to see it within the Callable
@@ -214,6 +218,7 @@ final Hotel hotel = new Hotel();
214
218
{% endhighlight %}
215
219
216
220
## Le QueryBuilder
221
+
217
222
Le QueryBuilder a pour but de construire des requêtes SQL sans faire du SQL (ou presque). Il permet de chaîner les appels de méthodes afin de rendre plus lisible la requête :
218
223
219
224
{% highlight java %}
@@ -226,6 +231,7 @@ Pas besoin de s'étaler sur cette fonctionnalité qui n'est pas spécifique à A
226
231
# L'intégration à Android
227
232
228
233
## Création et mise à jour de schémas
234
+
229
235
ORMLite fournit un OrmLiteSqliteOpenHelper qui étend le SQLiteOpenHelper d'Android et qui permet de créer automatiquement le schéma SQLite et de le mettre à jour. Cette classe surcharge les onCreate et onUpgrade pour les besoins de SQLite. D'autres outils sont disponibles comme TableUtils qui permet de créer, vider et supprimer des tables.
230
236
231
237
## Accès aux DAO dans les activités
@@ -267,4 +273,27 @@ Par contre, il faudra bien prendre soin de libérer le helper afin de fermer la
267
273
268
274
Ceci permettra d'éviter à ORMLite la recherche de cette classe par réflexion (encore une fois).
269
275
270
-
## Benchmarks
276
+
## Benchmarks
277
+
278
+
J'ai testé l'insertion de 1000 objets simples avec et sans transaction :
279
+
280
+
- sans tx : 1000 objets en 97874 ms, soit 98 ms par objet
281
+
- avec tx : 1000 objets en 842 ms, soit 0,8 ms par objet
282
+
283
+
On voit que l'utilisation des transactions est bien plus rapide dans le cas d'insertions en masse.
284
+
285
+
Reste à comparer avec du Android natif :
286
+
287
+
- sans tx : 1000 objets en 92468 ms, soit 92 ms par objet
288
+
- avec tx : 1000 objets en 1178 ms, soit 1,2 ms par objet
289
+
290
+
Ces chiffres ne sont pas exactes car il faudrait beaucoup plus de tests mais ils me confortent dans l'idée qu'ORMLite ne pénalise mon application en terme de performances.
291
+
292
+
## Le ressenti utilisateur
293
+
294
+
Comme écrit dans le chapitre précédent, je ne ressens aucune différence notable en terme d'utilisation de l'application.
295
+
296
+
297
+
# Conclusion
298
+
299
+
ORMLite est donc un outil assez complet et assez léger (310 Ko) pour nos applications Android. Il nous permet d'écrire un code plus propre, plus lisible et plus léger. Il nous rapproche aussi de l'architecture utilisée dans nos développements Java côté serveur. Pour aller plus loin, nous pourrons coupler ORMLite avec un framework d'injection comme RoboGuice, que l'on étudiera dans un prochain article. Stay tuned !
0 commit comments