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 :

Faire un bon DAO


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Par défaut Faire un bon DAO
    Bonjour à tous, même si j'utilise Spring dans mon exemple, mon cas et ma question se veulent plus générique, je cherche à savoir ou stocker mes requêtes (Je parle ici de la requete SQL stocké dans un String ou StringBuffer)
    Actuellement, c'est la manière que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public Categorie getCategorie(int categorieId){
    StringBuffer query=new StringBuffer();
    query.append("SELECT categorieId");
    query.append(" ,categorieName");
    query.append(" FROM categorie");
    query.append(" WHERE categorieId=?");
    //L'appel utilise JdbTemplate mais cela n'a pas d'importance
    return getJdbcTemplate().queryForObject(query.toString(), mapperCategorie,
    				categorieId);
    }
    Dans ce cas, à chaque appel, j'instancie un objet StringBuffer.
    Est-ce qu'il ne serait pas mieux ou conseillé d'instancier ma query dans le constructeur de ma classe, et de l'appeler.

    Les 2 systèmes ont des avantages et des inconvénients: La première est un peu plus lente, alors que la deuxième conserve les query en mémoire, qu'en pensez-vous?


    D

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Dans la mesure où ta requête est statique, je ne vois pas trop l'intérêt de passer par un StringBuffer (ou StringBuilder...).
    Autant utiliser une constante ou un littéral...

    L'autre question pourrait être : où stocker ces constantes...
    Là, on peu imaginer plusieurs méthodes dont :
    - la chaîne de caractère directement dans le query (ce que tu proposes)
    - un fichier de propriétés
    - un fichier xml (bof, je préfère le fichier de propriétés)
    - une classe avec propriétés static
    - etc...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Par défaut
    En effet, dans mon cas, j'ai utilisé StringBuffer parce que j'ai repris une requête de mon projet que j'ai simplifié ensuite.

    Mais si on prend l'exemple d'un String. Je suis pas fan des fichiers propriété ou tu sais plus trop ou c'est utilisé,

    Moi j'avais pensé soit utilisé un traditionnel

    public static final String marequete1="MON SELECT ...";

    Ou alors, comme j'utilise l'injection de dépendance de Spring, mettre mon attribut private propre à mon objet instancié

    private String ma requete

    et l'initialiser dans mon Constructeur.

    Je sais pas si y'a une différence au niveau mémoire entre une variable static ou une variable privé d'un objet instancié sachant que Spring m'assure que mon objet n'est instancié que la première fois. Mon application utilise toujours le même objet.

    Cela suppose par contre, que même mes requêtes peu utilisé soit toujours là quelques part en mémoire (Inquiétant non )

    D'avance merci pour vos réponses.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Je ne pense pas qu'il y ait une (grosse) différence entre une propriété static d'une classe et une propriété initialisée par Spring (ou les 2 ensembles, ce qui est mieux si on veut partager ces informations entre plusieurs classes)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 123
    Par défaut
    C'est mon avis, je peut me tromper, c'est pour cela que je demande ici

    Pour le moment, je n'avais envisager de faire appels à mes requêtes que dans la classe. C'est à dire que par exemple, les requêtes concernant la récupération de "Categorie" ne sont appelé que par mes fonctions de ma classe CategorieDao

    Mais maintenant que vous le dites, en supposant des utilisations par des classes extérieures,et selon les règles du principe d'injection de dépendance de Spring, il s'agirait d'un véritable sacrilège si je me mettais à appeler directement des variables statiques d'une autre classe non?

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Dans la mesure où on cible les DAO par "entité", l'intérêt de partager une requête concernant une DAO avec une autre n'a pas beaucoup de sens.
    On mon avis, l'injection simple avec Spring (si déjà tu l'utilises) suffit largement pour rendre les choses souples...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Faire le bon choix de SGBD : MySQL, ou les autres ?
    Par shkyo dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 06/07/2006, 13h42
  2. Faire des bons de livraison (débutant)
    Par teddie dans le forum Access
    Réponses: 8
    Dernier message: 31/03/2006, 14h44
  3. [SCHEMA]Comment faire un bon shema?
    Par zoltix dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 20/01/2006, 12h15
  4. [FEDORA] Faire le bon choix entre Fedora Core 1, 2, 3 ou 4 ?
    Par MonsieurAk dans le forum RedHat / CentOS / Fedora
    Réponses: 16
    Dernier message: 27/09/2005, 08h23
  5. [avis] Comment faire un bon divx HD ?
    Par FFF dans le forum Vidéo
    Réponses: 1
    Dernier message: 29/08/2005, 10h46

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