antislashn.org Android - ORMLite D - 1/15
Persistance de données
avec
ORMLite
version 1.0
antislashn.org Android - ORMLite D - 2/15
Introduction
● Projet ORM en open source
● ORM : Object Relationnal Mapping
● Si...
antislashn.org Android - ORMLite D - 3/15
Introduction
● La liaison entre une entité et la base de données
peut-être effec...
antislashn.org Android - ORMLite D - 4/15
Étapes d'utilisation d'ORMLite
● Création des entités
● Codage de la classe help...
antislashn.org Android - ORMLite D - 5/15
Codage de l'entité
● L'entité doit comporter un constructeur par défaut
● Les an...
antislashn.org Android - ORMLite D - 6/15
Codage de l'entité
● @DatabaseField : annotation de propriété
● l'annotation mar...
antislashn.org Android - ORMLite D - 7/15
Codage de l'entité
● Exemple (extrait)
@DatabaseTable(tableName="tasks")
public ...
antislashn.org Android - ORMLite D - 8/15
Codage de la classe helper
● Basée sur la classe OrmLiteSqliteOpenHelper
● Gère ...
antislashn.org Android - ORMLite D - 9/15
Codage de la classe helper
public class TaskOpenHelper extends OrmLiteSqliteOpen...
antislashn.org Android - ORMLite D - 10/15
Mise en place du pattern DAO
● Chaque entité possède sa classe DAO
● Data Acces...
antislashn.org Android - ORMLite D - 11/15
Utilisation de ORMLite DAO
● Le DAO est récupéré auprès du helper
● le helper e...
antislashn.org Android - ORMLite D - 12/15
DAO ORMLite
● Le DAO ORMLite possède de nombreuses méthodes
● queryForID(ID id)...
antislashn.org Android - ORMLite D - 13/15
DAO ORMLite
● Certaines méthode utilisent des requêtes
préparées
● classes spéc...
antislashn.org Android - ORMLite D - 14/15
DAO ORMLite
● Les requêtes préparées sont construites via des
fabriques
● class...
antislashn.org Android - ORMLite D - 15/15
DAO ORMLite
● Exemple de requête
● extrait de code
● la requête préparée aurait...
copyleft
Support de formation créer par
Franck SIMON
http://www.franck-simon.com
copyleft
Cette œuvre est mise à disposition sous licence
Attribution
Pas d'Utilisation Commerciale
Partage dans les Mêmes ...
Prochain SlideShare
Chargement dans…5
×

Android ORMLite

1 877 vues

Publié le

Annexe ORMLite de mon support Android

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
1 877
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
48
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Android ORMLite

  1. 1. antislashn.org Android - ORMLite D - 1/15 Persistance de données avec ORMLite version 1.0
  2. 2. antislashn.org Android - ORMLite D - 2/15 Introduction ● Projet ORM en open source ● ORM : Object Relationnal Mapping ● Site du projet : http://ormlite.com/ ● Supporte les bases de données JDBC et la plateforme Android ● JDBC : Java DataBase Connectivity ● ORMLite utilise les appels natifs vers SQLite sous Android – le support de JDBC par Android n'est pas complet ● Packages à télécharger : ● ormlite-core.jar ● ormlite-android.jar
  3. 3. antislashn.org Android - ORMLite D - 3/15 Introduction ● La liaison entre une entité et la base de données peut-être effectuée par ● annotations ORMLite ● annotations JPA ● fichier XML ● les exemples présentés utiliseront les annotations ORMLite – reportez-vous au projet "Todo – ORMLite" ● Les entités doivent posséder un constructeur par défaut
  4. 4. antislashn.org Android - ORMLite D - 4/15 Étapes d'utilisation d'ORMLite ● Création des entités ● Codage de la classe helper ● Création des DAO ● Créer les activités ● les activités utilisent la classe OpenHelperManager ● une activité peut étendre la classe OrmLiteActivity ● Pour que les libraires ORMLite soient incluses dans l'APK, les ajouter dans l'onglet "Order and Export" du "Java Build Path" ● clic droit sur le projet, puis "Properties"
  5. 5. antislashn.org Android - ORMLite D - 5/15 Codage de l'entité ● L'entité doit comporter un constructeur par défaut ● Les annotations ORMLite utilisées sont : ● @DatabaseTable ● @DatabaseField ● @DatabaseTable : annotation de classe ● marque la classe comme étant une entité ● principal attribut – tableName : nom de la table
  6. 6. antislashn.org Android - ORMLite D - 6/15 Codage de l'entité ● @DatabaseField : annotation de propriété ● l'annotation marque les propriétés devant être sauvegardées en base ● principaux attributs – columnName : nom de la colonne ● par défaut le nom de la propriété – dataType : type SQL – canBeNull : colonne nullable, vrai par défaut – pour spécifier l'index, un des attributs suivant doit être présent ● id : index ● generatedId : auto-incrément, faux par défaut ● generatedIdSequence : séquence de nombres (selon la base) – useGetSet : utilisation des méthodes get et set ● par défaut introspection sur les propriétés
  7. 7. antislashn.org Android - ORMLite D - 7/15 Codage de l'entité ● Exemple (extrait) @DatabaseTable(tableName="tasks") public class Task{ public static final int FAIBLE = 1; public static final int NORMAL = 2; public static final int URGENT = 3; @DatabaseField(columnName="_ID", generatedId=true) long id; @DatabaseField(canBeNull=false) String title; @DatabaseField String description; @DatabaseField int priority = NORMAL; @DatabaseField(columnName="time_ms", useGetSet=true) private long timeMs; private Time time = new Time(); ... } propriété non sauvegardée nom de la table en base clé primaire auto-incrément utilisation des get et set
  8. 8. antislashn.org Android - ORMLite D - 8/15 Codage de la classe helper ● Basée sur la classe OrmLiteSqliteOpenHelper ● Gère la création et la mise à niveau de la base ● méthodes onCreate(...) et onUpgrade(...) ● Utilisée par toutes les activités de l'application ● ne pas ouvrir de multiple connexions vers la base ● utiliser OpenHelperManager qui gère les connexions ● La classe TableUtils possède des méthodes statique de gestion des tables ● dropTable(...), clearTable(...), createTable(...), ...
  9. 9. antislashn.org Android - ORMLite D - 9/15 Codage de la classe helper public class TaskOpenHelper extends OrmLiteSqliteOpenHelper { public static final String DB_NAME = "tasks.db"; public static final int DB_VERSION = 1; private static final String tag = TaskOpenHelper.class.getName(); public TaskOpenHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) { Log.i(tag,">>> création de la base de données - version "+DB_VERSION); try { TableUtils.createTable(connectionSource, Task.class); } catch (SQLException e) { Log.e(tag,">>> ERREUR de création de base de donnéesn" + e); } } @Override public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) { Log.i(tag,">>> mise à jour de la base de données - passage de "+oldVersion+" à "+newVersion); try { TableUtils.dropTable(connectionSource, Task.class, true); TableUtils.createTable(connectionSource, Task.class); } catch (SQLException e) { Log.e(tag,">>> ERREUR de mise à jour de base de donnéesn" + e); } } } création de la table suppression de la table, puis création on étend le helper de ORMLite
  10. 10. antislashn.org Android - ORMLite D - 10/15 Mise en place du pattern DAO ● Chaque entité possède sa classe DAO ● Data Access Object ● permet d'isoler les opérations sur la base – pas de couplage entre l'application et la technologie de persistance – l'application utilise la couche DAO pour interroger la base ● le DAO fournit les méthodes de création, suppression, mise à jour, interrogation ● Des DAO sont fournis par ORMLite ● attention la couche DAO ORMLite fournit une couche technique, mais n'isole pas de la technologie utilisée ● votre propre couche DAO peut alors encapsuler la couche DAO ORMLite
  11. 11. antislashn.org Android - ORMLite D - 11/15 Utilisation de ORMLite DAO ● Le DAO est récupéré auprès du helper ● le helper est récupéré auprès de OpenHelperManager – permet une meilleure gestion des connexions partagées entre les différents threads de l'application ● utilise la méthode getDao(Class<T> clazz) – extrait de code private TaskOpenHelper helper = null; private Dao<Task, Long> dao = null; private Context context; ... if (helper == null) helper = OpenHelperManager.getHelper(context, TaskOpenHelper.class); try { dao = helper.getDao(Task.class); } catch (SQLException e) { Log.e(tag, ">>> ERREUR d'acquisition de DAOn" + e); } le helper que nous avons codé (cf. slide 9) DAO fournit par ORMLite construit sur l'entité Task avec un identifiant de type Long Context Android récupération de notre helper récupération d'un DAO ORMLite sur l'entité Task
  12. 12. antislashn.org Android - ORMLite D - 12/15 DAO ORMLite ● Le DAO ORMLite possède de nombreuses méthodes ● queryForID(ID id) : recherche d'une entité par son index ● queryForAll() : récupère toutes les entités ● queryForEq(String fieldName,Object value) : récupère les entités par rapport à une valeur de champ ● create(T data) : crée un nouvel enregistrement en base ● update(T data) : met à jour l'enregistrement lié à l'entité ● delete(T data) : supprime l’enregistrement lié à l'entité ● … cf. la documentation pour une liste exhaustive
  13. 13. antislashn.org Android - ORMLite D - 13/15 DAO ORMLite ● Certaines méthode utilisent des requêtes préparées ● classes spécifiques à ORMLite
  14. 14. antislashn.org Android - ORMLite D - 14/15 DAO ORMLite ● Les requêtes préparées sont construites via des fabriques ● classes DeleteBuilder, QueryBuilder, UpdateBuilder ● les fabriques sont obtenues via le DAO ORMLite – méthodes ● deleteBuilder(), queryBuilder(), updateBuilder() ● les fabriques possèdent des méthodes pour construire la requête – where(), orderBy(), … ● la méthode prepare() de la fabrique permet de récupérer la requête préparée
  15. 15. antislashn.org Android - ORMLite D - 15/15 DAO ORMLite ● Exemple de requête ● extrait de code ● la requête préparée aurait pu être remplacée par ... public List<Task> getTasksByPrirority(int priority){ List<Task> tasks = null; QueryBuilder<Task, Long> builder = dao.queryBuilder(); try { builder.where().eq("priority", priority); tasks = dao.query(builder.prepare()); } catch (SQLException e) { Log.e(tag, ">>> ERREUR de récupération depuis la basen" + e); } return tasks; } ... tasks = dao.queryForEq("priority", priority); Dao<Task, Long> ORMLite
  16. 16. copyleft Support de formation créer par Franck SIMON http://www.franck-simon.com
  17. 17. copyleft Cette œuvre est mise à disposition sous licence Attribution Pas d'Utilisation Commerciale Partage dans les Mêmes Conditions 3.0 France. Pour voir une copie de cette licence, visitez http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ ou écrivez à Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.

×