Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| slam4:orm:etudiants:maxime [2012/12/04 14:23] – maxime170492 | slam4:orm:etudiants:maxime [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ====== Produits et catégories ====== | ||
| + | |||
| **1) Comment est déclarée la table assurant la persistance d’un objet ?** | **1) Comment est déclarée la table assurant la persistance d’un objet ?** | ||
| Ligne 6: | Ligne 8: | ||
| **2) Comment est déclaré le mapping entre un membre de la classe et un champ de la table relationnelle ?** \\ | **2) Comment est déclaré le mapping entre un membre de la classe et un champ de la table relationnelle ?** \\ | ||
| + | |||
| + | <code java|h code Java> | ||
| + | hasMany(KLigne.class); | ||
| + | belongsTo(KCategorie.class); | ||
| + | </ | ||
| " | " | ||
| Ligne 12: | Ligne 19: | ||
| **3) Comment est déclarée la clé primaire de la table ?**\\ | **3) Comment est déclarée la clé primaire de la table ?**\\ | ||
| + | |||
| + | <code java|h code Java> | ||
| + | keyFields=" | ||
| + | </ | ||
| keyFields=“id”; | keyFields=“id”; | ||
| Ligne 25: | Ligne 36: | ||
| **5) Montrez à l’aide d’un schéma (par ex. deux classes liées au dessus de deux tables liées) comment se paramètre le lien bidirectionnel entre deux classes (en spécifiant les éléments à fournir dans le constructeur)** \\ | **5) Montrez à l’aide d’un schéma (par ex. deux classes liées au dessus de deux tables liées) comment se paramètre le lien bidirectionnel entre deux classes (en spécifiant les éléments à fournir dans le constructeur)** \\ | ||
| - | {{: | + | {{: |
| + | |||
| + | ====== Programme de test ====== | ||
| + | |||
| + | //Analysez le code du programme et répondez aux questions en vous aidant au besoin de la documentation :// \\ | ||
| + | |||
| + | |||
| + | **1) À quoi correspond la méthode kstart() ?** \\ | ||
| + | |||
| + | <code java|h code Java> | ||
| + | public static void main(String[] args) { | ||
| + | Ko.useCache=true; | ||
| + | KCache.loadAllCache(); | ||
| + | try { | ||
| + | Ko.kstart(); | ||
| + | </ | ||
| + | La méthode kstart() correspond au démarrage du test de l' | ||
| + | |||
| + | **2) Comment ont été traduits les liens objet entre le membre catégorie et produits entre ces classes dans les tables de la base ?** \\ | ||
| + | |||
| + | Les liens objets entre " | ||
| + | |||
| + | **3) Quelles requêtes SQL ont été créées par KObject pour réaliser la persistance ?** \\ | ||
| + | |||
| + | Afin de réaliser la persistance, | ||
| + | (visibles dans la console lors du test) \\ | ||
| + | INSERT INTO categorie(libelle) VALUES(' | ||
| + | INSERT INTO produit(idCategorie, | ||
| + | |||
| + | **4) Que se passe t-il si l' | ||
| + | |||
| + | En cas d' | ||
| + | |||
| + | |||
| + | ====== Chargement d'un objet ====== | ||
| + | |||
| + | |||
| + | // | ||
| + | |||
| + | **1) Précisez ce que charge exactement KObject lors du chargement d'un Objet** \\ | ||
| + | |||
| + | Lors du chargement d'un Objet, KObject va charger les catégories mais aussi les objets de ces catégories \\ | ||
| + | SELECT * FROM categorie WHERE categorie.id=' | ||
| + | KOBJECT : KCategorie.loadFromDb → {id=1} \\ | ||
| + | KOBJECT : KConstraintHasMany.load → class metier.KProduit \\ | ||
| + | SELECT * FROM produit WHERE idCategorie=' | ||
| + | KOBJECT : KProduit.loadFromDb → {id=52} \\ | ||
| + | [...] \\ | ||
| + | KOBJECT : KProduit.loadFromDb → {id=182} \\ | ||
| + | |||
| + | |||
| + | **2) Précisez comment sont chargées les instances liées à un objet chargé pour les liens belongsTo et hasMany** \\ | ||
| + | |||
| + | belongsTo: \\ | ||
| + | Pour charger les instances liées à un objet en Many to One, par exemple un produit, KObject va dans un premier temps récupérer le produit à l'aide d'un select. Ensuite KObject va récupérer la catégorie correspondante. \\ | ||
| + | Console: \\ | ||
| + | SQL : KDataBase.sendQuery → SELECT * FROM produit WHERE produit.id=' | ||
| + | SQL : KDataBase.sendQuery → SELECT * FROM Ligne WHERE idProduit=' | ||
| + | SQL : KDataBase.sendQuery → SELECT * FROM categorie WHERE id=' | ||
| + | hasMany: \\ | ||
| + | Pour le cas d'un One To Many KObject va effectuer deux requêtes SQL. Dans un premier temps la catégorie sera chargée ensuite tous les produits appartenant à cette catégorie seront chargés. \\ | ||
| + | Console: \\ | ||
| + | SQL : KDataBase.sendQuery → SELECT * FROM categorie WHERE categorie.id=' | ||
| + | SQL : KDataBase.sendQuery → SELECT * FROM produit WHERE idCategorie=' | ||
| + | |||
| + | **3) En quoi consiste le chargement paresseux de KObject ?** \\ | ||
| + | |||
| + | |||
| + | Le chargement dit " | ||
| + | Exemple : Il n' | ||
| + | Un peu comme Quentin .. :-x \\ | ||
| + | ====== Chargement de listes d' | ||
| + | |||
| + | // | ||
| + | |||
| + | |||
| + | ===== Projection ===== | ||
| + | |||
| + | **1) Interprétez et expliquez le résultat obtenu** \\ | ||
| + | |||
| + | Voici le résultat obtenu : \\ | ||
| + | |||
| + | <code java|h code java> | ||
| + | System.out.println(categories.showWithMask(" | ||
| + | </ | ||
| + | |||
| + | Explication : On affiche à l' | ||
| + | ===== Sélection ===== | ||
| + | |||
| + | **1) Combien de requêtes SQL sont exécutées par KObject ?** | ||
| + | |||
| + | **2) Comment l' | ||
| + | |||
| + | |||
| + | //Remplacer le lien belongsTo sur la classe Produit par :// \\ | ||
| + | |||
| + | <code java |h code Java> | ||
| + | belongsTo(KCategorie.class).setLazy(true); | ||
| + | </ | ||
| + | |||
| + | **1) Combien de requêtes SQL sont maintenant exécutées par KObject ?** \\ | ||
| + | |||
| + | |||
| + | **2) Comment l' | ||
| + | |||
| + | //A partir du programme :// \\ | ||
| + | |||
| + | **1) Interprétez les requêtes SQL exécutées par KObject** \\ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Sélection avec distinct et projection ===== | ||
| + | |||
| + | |||
| + | //A partir du code et de son exécution :// \\ | ||
| + | |||
| + | **1) Expliquer ce que fait le programme** \\ | ||
| + | |||
| + | |||
| + | ====== Gestion des commandes ====== | ||
| + | |||
| + | ===== Commande ===== | ||
| + | ===== Ligne ===== | ||
| + | |||
| + | **1) Justifiez l' | ||
| + | |||
| + | |||
| + | ====== Création de commandes ====== | ||
| + | |||
| + | |||
| + | **1) Analysez puis commentez chaque ligne (dans le code) de ce programme** \\ | ||
| + | |||
| + | |||
| + | **2) Vérifier que l' | ||
| + | |||
| + | |||
| + | |||
| + | ====== Test Web ====== | ||
| + | |||
| + | ... \\ | ||
| + | //Ajouter toutes les classes (servlet) et méthodes nécessaires pour éviter d' | ||
| + | |||
| + | |||
| + | Document réalisé par : | ||
| + | --- // | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||