SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
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
● 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
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
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"
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
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
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
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(...), ...
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
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
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
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
antislashn.org Android - ORMLite D - 13/15
DAO ORMLite
● Certaines méthode utilisent des requêtes
préparées
● classes spécifiques à ORMLite
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
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
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 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.

Contenu connexe

Tendances

"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012Jean-Michel Doudoux
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravoSoumia Brabije
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Jean-Michel Doudoux
 
Microbox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien RoyMicrobox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien Royekino
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Jean-Michel Doudoux
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautesAbdenour Bouateli
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsAntoine Rey
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Jean-Michel Doudoux
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java Youness Boukouchi
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbcRachid Lajouad
 
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Corinne Schillinger
 

Tendances (20)

"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012
 
Jenkins
JenkinsJenkins
Jenkins
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
Installation et configuration d'openbravo
Installation et configuration d'openbravoInstallation et configuration d'openbravo
Installation et configuration d'openbravo
 
Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10Devoxx 2018 Après Java 8, Java 9 et 10
Devoxx 2018 Après Java 8, Java 9 et 10
 
Microbox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien RoyMicrobox : Ma toolbox microservices - Julien Roy
Microbox : Ma toolbox microservices - Julien Roy
 
Springioc
SpringiocSpringioc
Springioc
 
Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10Voxxeddays lux 2018 apres java 8, java 9 et 10
Voxxeddays lux 2018 apres java 8, java 9 et 10
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautes
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du temps
 
JAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de donnéesJAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de données
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Gradle_ToulouseJUG
Gradle_ToulouseJUGGradle_ToulouseJUG
Gradle_ToulouseJUG
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
 
JAVA Chapitre1
JAVA Chapitre1 JAVA Chapitre1
JAVA Chapitre1
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbc
 
Maven
MavenMaven
Maven
 
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)Automatisez vos tâches répétitives avec Grunt (Blend 2013)
Automatisez vos tâches répétitives avec Grunt (Blend 2013)
 
Jdbc
JdbcJdbc
Jdbc
 

En vedette

Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1ATHMAN HAJ-HAMOU
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...dbi services
 
Presentació assamblea
Presentació assamblea Presentació assamblea
Presentació assamblea FC Barcelona
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?iniciativaverds
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Daniel Rehn
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tFrancois Ostyn
 
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IICampus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IIDaniel Rehn
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.MongoDB
 
Atelier agile 2009_09_27
Atelier agile 2009_09_27Atelier agile 2009_09_27
Atelier agile 2009_09_27domidp
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáZarathon Maia
 
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipmanjonesshipman
 
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Daniel Rehn
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPelliando dias
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaManuel Menezes de Sequeira
 
Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanJulien Fallet
 
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T IIHerdwangerSV
 

En vedette (20)

Introduction à Hibernate p.1
Introduction à Hibernate p.1Introduction à Hibernate p.1
Introduction à Hibernate p.1
 
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
SQL Server 2008 'Best Practices' - Stéphane Haby, dbi services - Mövenpick La...
 
Presentació assamblea
Presentació assamblea Presentació assamblea
Presentació assamblea
 
Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?Què ha fet ICV-EUiA amb el meu vot?
Què ha fet ICV-EUiA amb el meu vot?
 
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
Campus M21 | Medienpraxis II: Online - Vorlesung I vom 31.01.2013
 
Présentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@tPrésentation LMAX Disruptor So@t
Présentation LMAX Disruptor So@t
 
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung IICampus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
Campus M21 | Medienpraxis III: Online / Social Media - Vorlesung II
 
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
2014 03-26-appdevseries-session3-interactingwiththedatabase-fr-phpapp01-rev.
 
Atelier agile 2009_09_27
Atelier agile 2009_09_27Atelier agile 2009_09_27
Atelier agile 2009_09_27
 
Einführung in SCRUM
Einführung in SCRUMEinführung in SCRUM
Einführung in SCRUM
 
MySQL Query Optimization
MySQL Query OptimizationMySQL Query Optimization
MySQL Query Optimization
 
Apresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc QuixadáApresentação Java Web Si Ufc Quixadá
Apresentação Java Web Si Ufc Quixadá
 
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & ShipmanDominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
Dominator: Rectifieuse plane de profils à CN et avance lente de Jones & Shipman
 
NotORM
NotORMNotORM
NotORM
 
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
Campus M21 | Medienpraxis II: Online - Vorlesung III vom 11.02.2013
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
 
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referênciaSemana  5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
Semana 5: Caracteres, tipos char e int, tipos de valor vs. tipos de referência
 
Lean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanbanLean Kanban FR 2013 - Vin et kanban
Lean Kanban FR 2013 - Vin et kanban
 
Digitale Mentalität II
Digitale Mentalität IIDigitale Mentalität II
Digitale Mentalität II
 
02.10.2011 SC B.A.T II
02.10.2011   SC B.A.T II02.10.2011   SC B.A.T II
02.10.2011 SC B.A.T II
 

Similaire à Android ORMLite

Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity frameworkDNG Consulting
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database ConnectivityKorteby Farouk
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbcabderrahim marzouk
 
Modèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratiqueModèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratiqueVladyslav Riabchenko
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8lyonjug
 
OWF12/HTML 5 local storage , olivier thomas, cto at webtyss
OWF12/HTML 5 local storage , olivier thomas, cto at webtyssOWF12/HTML 5 local storage , olivier thomas, cto at webtyss
OWF12/HTML 5 local storage , olivier thomas, cto at webtyssParis Open Source Summit
 
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdshkhalidkabbad2
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]linasafaa
 
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Tarik Zakaria Benmerar
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 

Similaire à Android ORMLite (20)

3-android.pdf
3-android.pdf3-android.pdf
3-android.pdf
 
Linq et Entity framework
Linq et Entity frameworkLinq et Entity framework
Linq et Entity framework
 
Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénients
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
 
Modèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratiqueModèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratique
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Hibernate
HibernateHibernate
Hibernate
 
22410 b 04
22410 b 0422410 b 04
22410 b 04
 
201303 - Java8
201303 - Java8201303 - Java8
201303 - Java8
 
OWF12/HTML 5 local storage , olivier thomas, cto at webtyss
OWF12/HTML 5 local storage , olivier thomas, cto at webtyssOWF12/HTML 5 local storage , olivier thomas, cto at webtyss
OWF12/HTML 5 local storage , olivier thomas, cto at webtyss
 
Presentation JPA
Presentation JPAPresentation JPA
Presentation JPA
 
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
22410B_04.pptx bdsbsdhbsbdhjbhjdsbhbhbdsh
 
Développement Sous Android
Développement Sous AndroidDéveloppement Sous Android
Développement Sous Android
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]Mappingobjetrelationnel[1]
Mappingobjetrelationnel[1]
 
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
Design patterns et Design Emergeant - Micro Days - Modern Software Developmen...
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
Salesforce Tooling API
Salesforce Tooling APISalesforce Tooling API
Salesforce Tooling API
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 

Plus de Franck SIMON

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via mavenFranck SIMON
 
Java 8 - interfaces
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfacesFranck SIMON
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et streamFranck SIMON
 
Description d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumFranck SIMON
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd trainingFranck SIMON
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMXFranck SIMON
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrenteFranck SIMON
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method EditorFranck SIMON
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuéesFranck SIMON
 
Développement Android
Développement AndroidDéveloppement Android
Développement AndroidFranck SIMON
 

Plus de Franck SIMON (15)

Distribuer une librairie via maven
Distribuer une librairie via mavenDistribuer une librairie via maven
Distribuer une librairie via maven
 
Java 9 modules
Java 9    modulesJava 9    modules
Java 9 modules
 
Java 8 - lambda
Java 8 - lambdaJava 8 - lambda
Java 8 - lambda
 
Java 8 - interfaces
Java 8 - interfacesJava 8 - interfaces
Java 8 - interfaces
 
Java 8 - DateTime
Java 8 - DateTimeJava 8 - DateTime
Java 8 - DateTime
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
 
Description d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimumDescription d'un fichier de prélèvements SEPA minimum
Description d'un fichier de prélèvements SEPA minimum
 
Tomcat and apache httpd training
Tomcat and apache httpd trainingTomcat and apache httpd training
Tomcat and apache httpd training
 
JBoss - chapitre JMX
JBoss - chapitre JMXJBoss - chapitre JMX
JBoss - chapitre JMX
 
Java - programmation concurrente
Java - programmation concurrenteJava - programmation concurrente
Java - programmation concurrente
 
Android Input Method Editor
Android   Input Method EditorAndroid   Input Method Editor
Android Input Method Editor
 
Squid
SquidSquid
Squid
 
Architectures distribuées
Architectures distribuéesArchitectures distribuées
Architectures distribuées
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
jQuery
jQueryjQuery
jQuery
 

Android ORMLite

  • 1. antislashn.org Android - ORMLite D - 1/15 Persistance de données avec ORMLite version 1.0
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. antislashn.org Android - ORMLite D - 13/15 DAO ORMLite ● Certaines méthode utilisent des requêtes préparées ● classes spécifiques à ORMLite
  • 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. 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. copyleft Support de formation créer par Franck SIMON http://www.franck-simon.com
  • 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.