Android ORMLite
-
Upload
franck-simon -
Category
Technology
-
view
1.093 -
download
0
description
Transcript of Android ORMLite
![Page 1: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/1.jpg)
antislashn.org Android - ORMLite D - 1/15
Persistance de donnéesavec
ORMLite
version 1.0
![Page 2: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/2.jpg)
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
![Page 3: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/3.jpg)
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
![Page 4: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/4.jpg)
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"
![Page 5: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/5.jpg)
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
![Page 6: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/6.jpg)
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
![Page 7: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/7.jpg)
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
![Page 8: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/8.jpg)
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(...), ...
![Page 9: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/9.jpg)
antislashn.org Android - ORMLite D - 9/15
Codage de la classe helperpublic 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);
}@Overridepublic 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ées\n" + e);}
}@Overridepublic 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ées\n" + e);
}}
}
création de la table
suppression de la table,puis création
on étend le helper de ORMLite
![Page 10: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/10.jpg)
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
![Page 11: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/11.jpg)
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 DAO\n" + e);}
le helper que nous avons codé (cf. slide 9)
DAO fournit par ORMLite construit sur l'entité Task avecun identifiant de type Long
Context Android
récupération de notre helper
récupération d'un DAO ORMLite sur l'entité Task
![Page 12: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/12.jpg)
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
![Page 13: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/13.jpg)
antislashn.org Android - ORMLite D - 13/15
DAO ORMLite
● Certaines méthode utilisent des requêtes préparées● classes spécifiques à ORMLite
![Page 14: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/14.jpg)
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
![Page 15: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/15.jpg)
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 base\n" + e);
}return tasks;
}...
tasks = dao.queryForEq("priority", priority);
Dao<Task, Long> ORMLite
![Page 16: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/16.jpg)
copyleft
Support de formation créer par
Franck SIMON
http://www.franck-simon.com
![Page 17: Android ORMLite](https://reader035.fdocuments.us/reader035/viewer/2022081816/54969207b479595b4d8b4ffc/html5/thumbnails/17.jpg)
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.