IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

Mapper sa base de données avec le pattern DAO [Tutoriel]


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Par défaut Mapper sa base de données avec le pattern DAO
    Bonjour à toutes et tous !

    Je viens de terminer un tuto sur l'utilisation du pattern DAO.

    Vu que ce pattern permet d'encapsuler la façon dont un programme récupère les données d'un systèmes de stockage (fichier, BDD...), un exemple avec une base de données était de mise.
    Nous allons aussi voir comment associer ce pattern avec le pattern Factory afin de pouvoir utiliser plusieurs systèmes de stockage.

    Quelques pré-requis sont toutefois nécessaire : savoir utiliser JDBC !

    D'avance merci pour vos commentaires.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Hello,

    Pour une utilisation simple sans ORM c'est tout à fait concevable et même très bien définit pour.

    Mais pour de l'Hibernate, TopLink ou autre JDO c'est pas possible.

    Et pour la représentation en en tant que String tu peux utilisé ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /**
             * Make a String representation of the current object
             */
    	@Override
    	public String toString() {
    		return ToStringBuilder.reflectionToString(this);
    	}

  3. #3
    Membre chevronné Avatar de toomsounet
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 481
    Par défaut
    Merci pour ce tutoriel, c'est toujours bon de commencer par là avant de se pencher vers un ORM.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 73
    Par défaut
    Bonjour

    Une question à propos de ce tutoriel :
    Le pattern singleton est utilisé afin d'instancier la connexion à la base de données. Est ce que dans le cas d'une appli web il est judicieux d'utiliser ce pattern ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2007
    Messages : 68
    Par défaut
    Citation Envoyé par korrigan Voir le message
    Bonjour

    Une question à propos de ce tutoriel :
    Le pattern singleton est utilisé afin d'instancier la connexion à la base de données. Est ce que dans le cas d'une appli web il est judicieux d'utiliser ce pattern ?
    Non, il faudrait utiliser un pool de connexion

  6. #6
    Membre averti
    Profil pro
    Poste x dans une société
    Inscrit en
    Mars 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Poste x dans une société

    Informations forums :
    Inscription : Mars 2007
    Messages : 27
    Par défaut
    Merci pour ce tuto , Mais Concernant le code source , Est ce qu'il n'y a pas de méthode pour le générer automatiquement (un plugin eclipse par exemple) ?
    Parce que pour une BD contenant plus de 100 Tables on doit ecrire au moin
    (100 x 2) Classes ? Merci .

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Citation Envoyé par khaledUSTHB Voir le message
    Merci pour ce tuto , Mais Concernant le code source , Est ce qu'il n'y a pas de méthode pour le générer automatiquement (un plugin eclipse par exemple) ?
    Parce que pour une BD contenant plus de 100 Tables on doit ecrire au moin
    (100 x 2) Classes ? Merci .
    à ma connaissance aucun plugin ne génère de dao uniquement basé sur une bd mise à part dans l'utilisation de hibernate si tu veux hibernate utilise myeclipse c'est pas chère ...

  8. #8
    Invité de passage
    Inscrit en
    Juin 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 1
    Par défaut Merci
    Merci pour ce tutoriel, l'exemple est simple et claire, il m'a beaucoup servi

  9. #9
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Par défaut
    Bon tutorial dans l'ensemble mais sur les codes d'exemples les objets "Factory" sont utilisés avant même que la notion de "Factory" soit introduite donc on ne peut pas compiler pour faire les premiers tests. Il faut lire le tutorial en entier pour arriver à faire quelques choses.

    Pour ce qui est d'Hibernate il faut quand même décrire la base de données au format XML et c'est assez fastidieux lorsque l'on a beaucoup de tables, notamment des tables de jointure.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 59
    Par défaut
    Bonjour!!! merci pour ce tuto mais comme le message ci-dessus le dit : la méthode d'apprentissage progressive ne peut pas s'appliquer quelqu'un peu m'expliquer comment faire sans "Factory" ou si c'est pas possible m'expliquer ce qu'il y a à comprendre...?
    J'ai du mal à faire la part des choses quand les testes ne marchent pas et surtout ne peuvent pas marcher

    s'il suffit de mettre les lignes en commentaires ou je sais pas quoi d'autre dites le moi c'est tout nouveau pour moi les concepts comme ça j'aimerai bien comprendre. Merci

  11. #11
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Alors au risque de passer le gros vilain méchant :

    Quand je vois ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    .executeUpdate(
                    	"UPDATE developpeur SET dev_nom = '" + obj.getNom() + "',"+
                    	" dev_prenom = '" + obj.getPrenom() + "',"+
                    	" dev_lan_k = '" + obj.getLangage().getId() + "'"+
                    	" WHERE dev_id = " + obj.getId()
                     );
    Je me dis que c'est à corriger quand même, c'est un truc qui se ne se fait pas de bricoler des requêtes par concaténation de bouts de morceau de trucs . On utilise des requêtes paramétrées.


    En plus ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    } catch (SQLException e) {
    	            e.printStackTrace();
    	    }
    C'est de très loin pas suffisant comme gestion d'erreur, toutes tes requêtes font un échec silencieux et retourne des valeurs à la noix ce qui est le pire antipattern imaginable en terme de gestion d'exception.

    Et aussi, le pattern session-per-application qui est utilisé pour la connexion au SGBD est lui aussi une méthode très peu recommendable.

    Puis pourquoi utiliser des resultSet updatable alors que forward_only suffit largement? Es-tu sûr du bien-fondé de ce choix?

  12. #12
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    C'est une bonne initiative, mais je trouve que ton exemple n'est pas vraiment pratique, ce n'est pas générique, la classe DAO<T> n'apporte aucune factorisation et je ne vois pas sa réutilisation!! Il faut autant de classes DAO que de classes métier, et on est obligé d'implémenter des méthodes que parfois on en a pas vraiment besoin (si un objet n'est pas updatable par exemple).
    Gestion des exceptions quasi nulle comme l'a dit _skip.

  13. #13
    Futur Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 4
    Par défaut
    Citation Envoyé par _skip Voir le message
    Alors au risque de passer le gros vilain méchant :

    Quand je vois ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    .executeUpdate(
                    	"UPDATE developpeur SET dev_nom = '" + obj.getNom() + "',"+
                    	" dev_prenom = '" + obj.getPrenom() + "',"+
                    	" dev_lan_k = '" + obj.getLangage().getId() + "'"+
                    	" WHERE dev_id = " + obj.getId()
                     );
    Je me dis que c'est à corriger quand même, c'est un truc qui se ne se fait pas de bricoler des requêtes par concaténation de bouts de morceau de trucs . On utilise des requêtes paramétrées.


    En plus ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    } catch (SQLException e) {
    	            e.printStackTrace();
    	    }
    C'est de très loin pas suffisant comme gestion d'erreur, toutes tes requêtes font un échec silencieux et retourne des valeurs à la noix ce qui est le pire antipattern imaginable en terme de gestion d'exception.

    Et aussi, le pattern session-per-application qui est utilisé pour la connexion au SGBD est lui aussi une méthode très peu recommendable.

    Puis pourquoi utiliser des resultSet updatable alors que forward_only suffit largement? Es-tu sûr du bien-fondé de ce choix?


    je sais pas comment on peut gérer les sessions avec Pattern DAO ???

    j utlise JSP et Struts pour les couche Vue et controller.


    Merrrrrci bien

  14. #14
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Par défaut update Societe
    C'est bien comme introduction à DAO, sinon pour la gestion d'exception ou autres, je pense que c'est pas obligatoire lorsque le code ne serait qu'un exemple d'une introduction.

    Pour la mise à jour de société, vous mettez à jour les attributs de l'object et aussi les objects de Developpeur en relation, ça c'est exact. Mais vous faites à chaque maj insert dans la table de relation entre Societe et Developpeur ce qui me semble illogique et faux.

Discussions similaires

  1. meilleure base de données avec java
    Par mial dans le forum JDBC
    Réponses: 11
    Dernier message: 10/11/2010, 11h49
  2. Réponses: 1
    Dernier message: 27/05/2009, 21h02
  3. [Article] Mapper sa base de données avec le pattern DAO
    Par cysboy dans le forum Architecture
    Réponses: 1
    Dernier message: 27/05/2009, 21h02
  4. Modifier le nom d'une base de donnée avec erreur sy
    Par mmn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/11/2003, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo