Mapping

Fermé
for_info Messages postés 61 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 9 septembre 2008 - 1 juil. 2008 à 23:14
youscoul Messages postés 125 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 7 janvier 2013 - 28 avril 2010 à 22:54
Bonjour,
S'il vous plait ,est ce que je peux trouver quelqu'un qui peut m'expliquer à quoi sert le mapping .
Merci beaucoup d'avance.
A voir également:

7 réponses

Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
1 juil. 2008 à 23:57
Bonsoir,
Après, tout dépend de ce que tu appelles mapping. Ca peut être du mapping en mémoire comme l'explique Morgatte, du mapping objet relationnel, du mapping entre classes (api dozer par exemple pour créer des dto depuis des pojo), et j'imagine qu'il y a encore d'autres mappings que je ne connais pas...

De quoi parles-tu exactement?

Cordialement.
3
for_info Messages postés 61 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 9 septembre 2008 13
3 juil. 2008 à 13:53
oui , desolée pour ma question ambigue,
en fait je parle moi du mapping lors de la realisation d'une application J2EE, je veux savoir l'utilitée
Merci;
2
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
3 juil. 2008 à 14:21
Salut,
C'est encore assez imprécis.
En général, sur une application j2EE style site/application internet/intranet, tu as un mapping avec la base de données (donc en gros, tu utilises généralement un framework comme hibernate pour obtenir directement des beans java contenant les données de tes tables de base de donnée). Ca fait gagner énormément de temps de développement, et ensuite tu manipules tes données via des objets java, tu peux insérer en base, faire des updates...

Ensuite, tu peux avoir un mapping entre les différentes couches du pattern MVC : tu peux manipuler tes beans java dans ta couche business et vouloir restreindre les informations au niveau de la vue (typiquement tu as des beans manipulant les données utilisateurs, tu dois faire des vérifications sur le mot de passe, donc tu le récupéres comme attribut de classe. Au niveau de la vue, pour des raisons de sécurité, tu veux éviter de transférer cet objet car il contient le mot de passe justement).
Dans ce cas, tu utilises un mapping entre classes pour transformer ton bean en dto (Data transfert object), qui contiendra pratiquement toutes les données de ton bean, sauf celles que tu ne souhaites pas envoyer à la vue que tu ommettras volontairement.

Cordialement.
2
for_info Messages postés 61 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 9 septembre 2008 13
4 juil. 2008 à 11:20
Bonjour;
ok , desolée encore pour l'ambiguité et merci pour les explications;
Mais moi je suis debutante en tout ca ,
Je vais preciser clairement ce que j'ai et ce que je veux savoir,
En fait j'ai une application J2EE à faire,
Ce que je sais moi :
C'est ce qu'il faut faire une conception d'une part (diagramme uses case ,de sequence,de classe)c'est bon? , apres il faut implementer les classes que j'ai defini dans mon diagramme de classe (moi je vais utiliser NetBeans)c'est bon?
D'autre part il me faut la base de donnée (donc je vais creer une :j'utilise sql2005server)
La j'ai une petite question (est ce que les tables:je vais les créer comme ca ou je dois encore avoir mon MCD et apres mon MLD , Moi je crois que le MLD est obligatoire)
Et la la question de mon message :
Je dois faire quoi apres ,pour arriver à mes interfaces?
J'ai posé la question à qqn ,il m'a dit qu'il faut le mapping ,alors a quoi va servir ce mapping :)?
(pour les explication j'ai pas bien compris :c'est quoi les beansjava?)
Aider moi stp;
Merci bq d'avance;
2
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
6 juil. 2008 à 19:34
Hello,
C'est ce qu'il faut faire une conception d'une part (diagramme uses case ,de sequence,de classe)c'est bon? , apres il faut implementer les classes que j'ai defini dans mon diagramme de classe (moi je vais utiliser NetBeans)c'est bon?
Le diagramme des cas d'utilisation te permet de cerner les différents modules et fonctionnalités de ton application, de manière à mieux structurer la conception. C'est surtout intéressant pour bien cibler les besoins du client et pour lui faire valider le cahier des charges avant la phase de développement.
Le diagramme de classes, c'est important pour la conception, et ça te permet de mieux t'organiser et de prévoir les différents problèmes qui vont subvenir dans ta conception avant de les rencontrer, et donc de trouver des solutions architecturales avant le développements (enfin, tu auras tout de même des problèmes pendant le développement, mais moins si tu as déjà réfléchi à tout ça auparavant).

Je ne connais pas NetBeans (moi j'utilise Eclipse), mais pas de problème de ce côté là, c'est un IDE réputé.


D'autre part il me faut la base de donnée (donc je vais creer une :j'utilise sql2005server)
La j'ai une petite question (est ce que les tables:je vais les créer comme ca ou je dois encore avoir mon MCD et apres mon MLD , Moi je crois que le MLD est obligatoire)

Ici ça dépend, tu as plusieurs méthodes :
- soit tu fais ton MCD et tu en déduis ton MLD pour écrire tes scripts SQL à la main, et ensuite tu écris tes classes java pour mapper tes classes
- soit tu écris tes classes java (à partir de ton diagramme de classes) et tu génères les scripts SQL qui vont correspondre à ces classes (par exemple tu as le plugin Hibernate Tools qui fait ça avec Eclipse. Avec NetBeans, tu dois avoir le même genre d'outils j'imagine). Ca c'est plutôt l'approche haut-niveau, car tu ne te soucies pas trop de comment c'est implémenté en base, mais ça fonctionne comme tu le souhaites au niveau applicatif. En plus ça demande moins de boulot.

Perso, je préfère la première méthode, même si c'est plus long.

Je dois faire quoi apres ,pour arriver à mes interfaces?
J'ai posé la question à qqn ,il m'a dit qu'il faut le mapping ,alors a quoi va servir ce mapping :)?
(pour les explication j'ai pas bien compris :c'est quoi les beansjava?)

Grossièrement, un bean, c'est une instance d'une classe business qui ne contient pas de logique métier (ou alors seulement une logique qui lui est propre). Par exemple tu peux avoir une instance de classe vélo, qui va contenir des attributs selle, guidon, cadre, béquille, une liste de roues,... et des méthodes propres au vélo (gonflerPneus(), changerRoue() ...). C'est une instance d'une classe qui possède un constructeur par défaut (sans argument).

Dans le cadre d'un mapping, tes classes de mapping vont instancier des beans qui vont correspondre à tes tables :
Dans ta BD :
create table persons (id int(10) primary key, firstname varchar(32), lastname varchar(32));

Et la classe qui va mapper cette table sera de ce style :

public class Person {

 private Integer id;
 private String firstname;
 private String lastname;

 public Person() {
 }

 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }

 public String getFirstname()  {
  return firstname;
 }
 public void setFirstname(String firstname) {
  this.firstname = firstname;
 }

 public String getLastname()  {
  return lastname;
 }
 public void setFirstname(String lastname) {
  this.lastname = lastname;
 }

}


Voilà :). Ensuite, il ne te reste plus qu'à indiquer à ton application que ta classe Person mappe ta table persons (ça se fait facilement avec des annotations ou un fichier xml de mapping). Tu accèderas à tes données grâce à des dao (Data Access Objects), qui vont en gros se charger de récupérer directement des objets issus de ta base de données.

A quoi sert le mapping ?
Bah globalement, au lieu d'écrire des classes de lecture de données qui vont toutes ressembler à un truc du genre :
- je crée une connexion à ma BD
- je crée un statement
- j'effectue une requête particulière à ma méthode ("select firstname, lastname from persons where id=" + id + ";" par exemple)
- je parcours mon resultSet pour stocker mon résultat dans une instance de classe écrite à la main
- je ferme mon statement
- je ferme ma connexion
- je retourne l'instance en question
(NB : en pratique on ne crée/ferme pas la transaction dans chaque méthode, car c'est coûteux pour la BD, on le fait en amont de manière à utiliser la même connexion pour plusieurs requêtes)

tu as une méthode comme ça :
- création d'une session
- création d'une transaction
- tu écris une requête qui te récupère une liste d'objets correspondants à ta requête ("from Person where id=" + id + ";" par exemple)
- tu commites ta transaction (pas la peine pour cet exemple vu qu'on ne fait qu'un select)
- tu fermes ta transaction
- tu retournes ta liste

L'avantage : ça mappe directement les objets dans tes beans, tu n'as pas de mapping à faire directement, tu ne te soucies plus de ta base de données, mais uniquement des tes objets java).

Enfin, si tu utilises des frameworks intégrant des outils pour utiliser hibernate plus rapidement/facilement (genre Spring), ça se résume à une ligne de la sorte :
return getHibernateTemplate.get(Person.class, id);

ou si tu as un critère moins sélectif :

return (List<Person>) getHibernateTemplate.find("from Person where lastname='" + toto + "';");


Bref, ça te fait gagner beaucoup beaucoup de temps, et ça te permet de t'éviter tout le mapping qui ne t'apporte absolument rien en compétence, et te permet de te focaliser sur des choses plus importantes.

Voilà, j'espère que ça t'a éclairé et t'a convaincu de l'utilité du mapping (faire un mapping à la main pour petite table de 3 attributs c'est pas dérangeant, quand tu as 30 tables de 20 attributs, c'est carrément plus embêtant).

Cordialement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
for_info Messages postés 61 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 9 septembre 2008 13
7 juil. 2008 à 13:17
Bonjour ;
Meci beaucoup c'est très bien expliqué;
Je veux une petite chose si vous le permettez:
Pour mon application je suis entrain de me documenter sur les outils à utiliser,en fait pour eclipse ou netbeans j'ai pas encore tranché ,j'ai lu que la structuration ideale de mon application en couches sera sous cette forme :
couche [ui]-->couche [metier]-->couche[dao]-->objet image de la BD-->interface JPA-->implementation TopLink/Hibernate -->couche JDBC.
Mon probleme c'est que pour la couche JPA , et pour creer les entités beans correspondants aux tables de la base de données je veux savoir pourquoi je trouve pas un anglet correspondant si j'utilise TomCat comme serveur ,et c'est quoi la difference entre "TomCat" et "Sun Java System Application Server" et entre une application web et une application entreprise et entre Spring et ejb3 ,
Merci beaucoup encore pour les explications ca m'a enormement aidé ;
2
Marco la baraque Messages postés 996 Date d'inscription vendredi 9 mai 2008 Statut Contributeur Dernière intervention 5 novembre 2009 328
7 juil. 2008 à 22:20
Bonsoir,
Pour l'IDE, ok.
Pour ton modèle de couches, fais ce que tu veux, mais en général les applications sont des applis 3-tiers : ui, contrôleur, métier.
En appronfondissant un peu, ça fait :
couche [ui]-->couche [controleur] -->couche [metier]-->couche[dao]-->objet image de la BD

La couche JPA, c'est c'est java beans (objets mappant les tables de la BD). La couche TopLink/Hibernate n'existe pas, les frameworks sont simplement utilisés dans tes dao. Enfin, je ne sais pas ce que tu veux mettre dans ta couche
JDBC.

Mon probleme c'est que pour la couche JPA , et pour creer les entités beans correspondants aux tables de la base de données je veux savoir pourquoi je trouve pas un anglet correspondant si j'utilise TomCat comme serveur
Je ne vois pas le rapport entre ton serveur d'application et tes beans, désolé.

c'est quoi la difference entre "TomCat" et "Sun Java System Application Server"
Tomcat ne permet que d'exécuter des servlets et des jsp. Il ne propose pas de gestion d'ejb comme pourraient le proposer d'autres serveurs d'applications (GlassFish, Jboss, Websphere...). Je ne m'étendrai pas là dessus car je n'ai utilisé que Tomcat durant ma courte expérience d'informaticien.

une application web et une application entreprise
JEE fournit des bibliothèques/frameworks permettant de développer facilement des applications web, style internet/intranet (à destination donc des entreprises car en général un particulier n'a aucune raison de publier un site de ce style)... Je ne pense pas qu'il y ait vraiment de définition pour une application entreprise.

Cordialement.
0
for_info Messages postés 61 Date d'inscription mardi 27 novembre 2007 Statut Membre Dernière intervention 9 septembre 2008 13
8 juil. 2008 à 11:10
bonjour;
merci pour les explications;
Vous avez raison en ce qui concerne ma question qui lie les beans et le serveur d'application, je suis debutante en la matière et j'essais de se documenter ,donc je m'excuse pour les questions un peu deraillées.
Pour mon problème ,enfin j'ai decidé d'utiliser eclipse avec hibernate.
Je veux savoir (s'il vous plait)qu'est ce vous voulez dire par :
La couche TopLink/Hibernate n'existe pas, les frameworks sont simplement utilisés dans tes dao.
et si c'est possible je veux savoir comment on voit reellement cette notion de couches ,en d''autres termes quand on dit qu'une couche est implémentée:
ce que je sais moi c'est que :
la couche [ui]: est la couche qui dialogue avec l'utilisateur, Elle a pour rôle de fournir des données provenant de l'utilisateur à la couche [metier] ou bien de présenter à l'utilisateur des données fournies par la couche [ metier].
la couche[metier]:est la couche qui applique les règles dites métier, c.a.d. la logique spécifique de
l'application, sans se préoccuper de savoir d'où viennent les données qu'on lui donne, ni où vont les résultats qu'elle produit.
la couche [dao]:la couche qui fournit à la couche [metier] des données pré-enregistrées
(fichiers, bases de données, ...) et qui enregistre certains des résultats fournis par la couche [metier].
donc est ce que cela est vrai et suffisant :
couche metier ----> implementer les classes definies via le diagramme de classes .
couche dao -----> c'est le mapping via hibernate.
couche ui -----> c'est la creation des pages JSP.
aider moi s'il vous plait;
et je m'excuse encore pour les question deraillées;
merci beaucoup d'avance.
2
bonjour,
Pour etre honnete , je suis pas un expert en JEE, mais quand meme je sais bcp de choses à propos.
Ce que t'as ecris c vrai , il y a 3 couches
MVC :
M : modele ou metier ( dao, dto, mapping .....)
V : vue (jsp , html ,......)
C :controleur , ici c'est une aure chose que t'as demandé là, mais c'est une couche trés importante pour une application trois tiers.
0
Morgatte Messages postés 1219 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 janvier 2023 281
1 juil. 2008 à 23:35
Voici un extrai de tutoriel...


Tutorial 13 : Fichiers Mappés en Mémoire
(Memory Mapped Files)


Je vais vous montrer ce que sont les Fichiers Mappés en Mémoire et comment les employer à votre avantage. L'utilisation d'un Fichier Mappé est très facile comme vous le verrez dans ce Tutorial.

Downloadez l'exemple ici.

Aparté : Le procédé de File Mapping ou en français 'Mapper un Fichier en mémoire' c'est en faite faire une copie en mémoire d'un fichier qui était jusque là bien physique. Par exemple un fichier *.txt (physique) peut être entièrement copié quelque part en mémoire (il est Mappé) ce qui présente de gros avantages.
Théorie:
Si vous examinez l'exemple du Tutorial précédent, vous constaterez qu'il a un défaut sérieux : que se passe-t-il si la taille du fichier que vous voulez lire est plus grande que le bloc de mémoire allouée ? Ou que la chaîne de caractères que vous voulez chercher est coupée en deux à la fin du bloc de mémoire ? La réponse traditionnelle pour la première question c'est que vous devez à plusieurs reprises lire dans les données du fichier avant que l'on ne rencontre la fin du fichier. La réponse à la deuxième question c'est que vous devez vous préparer à ce cas spécial de fin de bloc de mémoire. ça s'appelle un problème de valeur aux frontières. C'est un vrai casse tête pour les programmeurs car ça engendre des bogues (des défauts) innombrables.
il n'y aurait plus aucun problème si nous pouvions réserver un très grand bloc de mémoire, assez grand pour stocker le fichier en entier. Cependant notre programme s'accaparerait trop de ressources. Ce sont les (Files Mapping) fichiers Mappés en Mémoire qui vont nous sauver. Pour utiliser les fichiers Mappés, vous pouvez vous imaginer que c'est un fichier entier, étant déjà chargé en mémoire et vous pouvez employer un pointer de mémoire pour lire ou écrire des données dans ce fichier. C'est aussi simple que cela. Nul besoin d'employer des fonctions API de mémoire et pas besoin de faire de différence entre les fonctions API de fichiers d'entrée et de sortie non plus, ce sont les mêmes dans les fichiers Mappés (Files Mapping). Il est aussi employée comme moyen de partage des données entre plusieurs process (entre plusieurs programmes). En employant les fichiers Mappés de cette façon, il n'y aucun fichier réellement impliqué. Sa représentation, c'est plutôt un bloc de mémoire réservé dans lequel chaque process peut *lire ou écrire*. Mais le partage de ces données entre plusieurs process est un point délicat, ça ne doit pas être traité à la légère. Vous devez exécuter ces process par ordre (les uns après les autres) en les synchronisant, sinon vos applications planteront très vite.
Dans ce Tutorial, nous ne verrons pas le sujet 'fichiers Mappés' (File Mapping) en tant que moyen pour créer une zone de mémoire partagée. Nous allons plutôt voir comment utiliser le 'File Mapping' comme moyen de "Mapper" un fichier en mémoire. En fait, le 'PE Loader' emploie le principe de File Mapping pour charger des fichiers exécutables en mémoire. C'est très commode uniquement pour les parties du fichier nécessaires, qui doivent être sélectivement lues sur le disque. Sous Win32, vous devez employer le File Mapping autant que possible.
Il y a quelques limitations au pricipe du File Mapping, quoique. La principale, c'est qu'une fois que vous aurez créé un Fichier Mappé en Mémoire, sa taille ne peut pas être modifiée pendant cette session. Donc le 'File Mapping' est important pour les fichiers 'Read-Only' (une des propriété d'un fichier) ou pour des opérations sur des fichiers qui ne doivent en aucun cas affecter la taille du fichier. Ça ne signifie pas que vous ne pouvez pas employer le File Mapping lorsque vous voulez augmenter la taille du fichier. Vous pouvez estimer sa nouvelle taille et prendre comme mémoire cette taille pour votre fichier mappé, comme ça sa taille sera réévaluée. C'est pas très pratique, c'est tout.
Assez d'explications. On va plonger dans l'exploration des fichiers Mappés (File Mapping). Pour employer le (File Mapping), on doit suivre ces étapes :

1. Appelez CreateFile pour ouvrir le fichier que vous voulez Mapper.
2. Appelez CreateFileMapping avec l'Handle du fichier renvoyé par CreateFile comme un de ses paramètres. Cette fonction crée un objet 'File Map' du fichier ouvert par CreateFile.
3. Appelez MapViewOfFile pour Mapper une région du fichier choisie ou bien du fichier entier en mémoire. Cette fonction renvoie le pointer du premier octet de la zone où commence le fichier Mappé.
4. Utilisez ce pointer pour lire ou écrire dans le fichier (bloc de donnée plutôt).
5. Appelez UnmapViewOfFile pour Unmapper le fichier.
6. Appelez CloseHandle avec l'Handle du Fichier Mappé (l'Handle du File Mapping) comme paramètre pour le refermer.
7. Appelez CloseHandle une fois de plus, mais cette fois-ci avec l'Handle renvoyé par CreateFile pour fermer le fichier réel.

1
youscoul Messages postés 125 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 7 janvier 2013 4
28 avril 2010 à 22:54
SVP pouvez vous mettre la source de ce tuto. Ou si tu peux m'expliquer comment mapper un fichier en langage C sous Visual situdio 2OO8. Plate forme Windows SP2. Un grand merci à toi.
0