Skip to content

Commit 673505a

Browse files
committed
Added conclusion to the ORMLite article
1 parent 4562dd6 commit 673505a

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

_posts/2012-05-09-ormlite-pour-android.markdown

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
---
1+
---
22
layout: post
33
title: ORMLite pour Android
44
author: dst17
@@ -16,6 +16,7 @@ Dans le cadre de mon étude des divers frameworks pour le développement java su
1616
# L'utilisation d'ORMLite
1717

1818
## Annoter son modèle
19+
1920
En Android natif, les objets de notre modèle sont de simples POJO tels que :
2021

2122
{% highlight java %}
@@ -111,6 +112,7 @@ Nous pouvons également déclarer des relations entre objets du modèle :
111112
{% endhighlight %}
112113

113114
Quelques points négatifs sur les relations :
115+
114116
- 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)).
115117
- 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 :
116118

@@ -122,7 +124,9 @@ La gestion des relations entre objets est une des bases d'un ORM et c'est un vra
122124

123125

124126
## Les DAO
127+
125128
ORMLite s'occupe du cycle de vie des DAO :
129+
126130
- la création via le DaoManager
127131
- une fois créés, ils sont réutilisés car leur création est une opération côuteuse
128132

@@ -191,11 +195,11 @@ Un dernier petit détail : il est possible d'activer un cache au niveau des DAO
191195
{% endhighlight %}
192196

193197
## Les transactions
198+
194199
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
196-
final Hotel hotel = new Hotel();
197200

198201
{% highlight java %}
202+
final Hotel hotel = new Hotel();
199203
TransactionManager.callInTransaction(connectionSource,
200204
new Callable<Void>() {
201205
public Void call() throws Exception {
@@ -214,6 +218,7 @@ final Hotel hotel = new Hotel();
214218
{% endhighlight %}
215219

216220
## Le QueryBuilder
221+
217222
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 :
218223

219224
{% highlight java %}
@@ -226,6 +231,7 @@ Pas besoin de s'étaler sur cette fonctionnalité qui n'est pas spécifique à A
226231
# L'intégration à Android
227232

228233
## Création et mise à jour de schémas
234+
229235
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.
230236

231237
## 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
267273

268274
Ceci permettra d'éviter à ORMLite la recherche de cette classe par réflexion (encore une fois).
269275

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

Comments
 (0)