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

JDBC Java Discussion :

Quelle logique dans le modele quand on utilise une base de données?


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 29
    Points : 35
    Points
    35
    Par défaut Quelle logique dans le modele quand on utilise une base de données?
    Bonjour à tous,

    je suis en train de réaliser un logiciel sur la nutrition sous Netbeans5.5.1 en J2SE en utilisant le pattern MVC. Il y a donc 3 packages (modele, vue, controleur) et j'ai commencé à faire quelques éléments de la vue. J'utilise une petite base de données sous Access2003. J'ai donc commencé à faire le modèle et réussi à exploiter la base de données.

    Le problème est que je ne sais pas comment structurer mon modèle par rapport à la base de données.

    Par exemple j'ai une table Utilisateur liée à une liste d'Aliments interdits :

    Utiliseur ( 1,n - 1,1 ) AlimentsInterdits ( 1,1 - 1,n ) Aliment

    J'ai donc fait un constructeur à partir d'un id pour une classe Utilisateur et Aliment. Dans le construteur, on va chercher les données dans la bd à partir de l'id et on construit l'instance de la classe concernée. J'ai fait la liaison avec un champ arrayList<Aliment> AlimentsInterdits = new arrayList() dans la classe Utilisateur.

    J'étais parti pour reproduire toute la bd sur le même principe et c'est là que je me suis dit que je risquais de coder plein de choses pour rien. Et tout un tas de questions m'est alors venu à l'esprit :
    - dois-je faire des classes pour toutes les tables?
    - dois-je stocker les liaisons sous la forme de collections/champs de classe ou sous la forme de liste/champs d'ids?

    Bref je m'appercois qu'il y a plein de façons de concevoir le modele et qu'il doit bien y avoir une logique propre pour incorporer la bd dans le modele mais je ne sais pas laquelle.
    Jusqu'à présent je ne stockais que quelques informations dans un fichier XML ou les informations n'étaient en mémoire que le temps d'utiliser l'application, du coup je ne sais pas comment faire mon modèle avec une bd : quelqu'un pourrait-il me filer quelques tuyeaux svp?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    23lectures, 0réponses : je ne suis pas clair peut-être?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    C'est un peu chacun son truc on le fait comme on le sent, pour ma part j'ai une librairie de class communes et une ou plusieurs class par vue chacune associée à une sous jsp. Pour ce qui est de la mise à jour de la bdd j'ai une class générique qui gère l'enregistrement et la suppression, la mise à jour étant une suppr+un enregistremet.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    En tout cas mieux vaut ne pas mettre le code d'accès aux données dans le modèle de données.
    Tu peux utiliser un mapping objet/relationnel pour gérer l'accès à la base de données, par exemple Hibernate. En gros tu lui décris tes objets et la façon dont ils sont stocké dans la base. Ensuite il s'occupe de tout (select, update, delete...) Si tu veux récupérer les aliments interdits d'un utilisateur ça donnerait quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Utilisateur u = session.createQuery("select u from Utilisateur where ...");
    for (Aliment a : u.getAlimentsInterdits()) {
      System.out.println(a);
    }

  5. #5
    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
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Pour la question initiale, il n'y a pas de réponse unique...
    On peut (dans le cas de ta relation many-to-many) préférer avoir un set d'objets cible (vu côté utilisateur par exemple, ce serait un set d'objets Aliment) ou alors un set des éléments de relation (un set d'objets AlimentsInterdits), ça dépend un peu du fait qu'il s'agit d'une relation porteuse ou non, dans tous les cas tu accèdes à l'aliment.

    Personnellement, j'utilise hibernate et ejb3 et j'ai une définition objet de toutes les tables (fort heureusement, tous ces objets sont générés à partir de la base de données, ouf ), les seules choses (presque) que je code "à la main", ce sont les classes de "Service Fonctionnel".

    Je ne sais pas si ça va t'aider, mais n'hésite pas à poser des questions pour clarifier...

    A+

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    A la base je voulais utiliser Hibernate; d'autant plus que je sors d'un long stage réalisé sur Symfony (Framework PHP5 très puissant) qui s'inspire de J2EE avec notamment un mapping objet-relationnel comme Hibernate.
    Malheureusement étant très à la bourre sur mon projet, je me suis dit que ce serait plus rapide d'utiliser JDBC pour une petite base de données que m'initier à Hibernate. Il y aussi qu'utiliser Hibernate alors que je ne savais pas utiliser les méthodes convetionnelles est un peu mettre la charue avant les boeufs.
    Quand j'aurai fini et présenté ce projet (c'est mon dernier exam), je le retaperai avec le maximum d'outils J2EE. J'essaierai aussi les autres techniques J2SE, j'ai par exemple utiliser les Drivermanager + ResultSet pour JDBC mais apparemment il y a une autre technique (les Datasources).

    Quoi qu'il en soit, vu que je n'avais pas de réponses hier j'ai déjà fait tout le mapping objet-relationnel à la main (je n'ai que 11 tables). Il me reste la manipulation des données (save, mise à jour, delete etc..) et les controles sur les setters. Après quoi je pense que j'aurai l'essenciel du mapping objet-relationnel. Du coup je vais pouvoir utiliser la méthode de Mengué george avec une classe générique pour les maj, supp etc..

    Merci à vous 3 pour votre aide!

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/08/2014, 12h01
  2. Réponses: 11
    Dernier message: 16/12/2007, 00h48
  3. Réponses: 1
    Dernier message: 24/08/2007, 23h16
  4. [ODBC] Utiliser une base de données Access sans les MFC
    Par Higestromm dans le forum Bases de données
    Réponses: 6
    Dernier message: 15/03/2005, 21h37

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