Comment utiliser JdbcTemplate pour effectuer des requêtes de Jointure
J'ai le texte suivant modèle de base de données
create table Diary (id bigint NOT NULL AUTO_INCREMENT,
creationDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
name varchar(255) not null,
description text,
viewtype varchar(255) not null,
member bigint,
primary key (id),
foreign key (member) references Member(id));
create table Page (id bigint NOT NULL AUTO_INCREMENT,
creationDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
viewtype varchar(255) not null,
diary bigint,
member bigint,
primary key (id),
foreign key (diary) references Diary(id),
foreign key (member) references Member(id));
create table Comment (id bigint NOT NULL AUTO_INCREMENT,
postingDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
comment text not null,
page bigint,
member bigint,
primary key (id),
foreign key (page) references Page(id)
foreign key (member) references Member(id));
Je suis à l'aide de spring JDbc modèle.
My interface looks like follows: accountid is the memeberid in the database.
Collection<Diary> getDiaries(Long accountId);
Et mon journal ressemble comme suit:
public class Diary {
private Collection<Page> pages;
private Long id;
private LocalTime creationDate;
private String name;
private String description;
private ViewType type;
}
Je voulais savoir comment la requête va chercher maintenant, si je voulais préparer un Journal de l'Objet à l'aide de jdbc modèle. Est est également possible de ne tirer qu'une seule requête et il suffit de préparer ce Journal d'objet parce que je vais éviter pour la même demande à plusieurs tirs de requêtes. Pour l'interface ci-dessus son très possible que je serai à l'aide de s requête de jointure ou est-il plus simple possible en utilisant spring JDBC modèle de cadre.
OriginalL'auteur Saurabh Kumar | 2013-02-26
Vous devez vous connecter pour publier un commentaire.
Vous seriez en mesure de créer une seule requête à l'aide de jointures externes (je suppose ici qu'il est possible d'avoir un journal intime qui n'ont pas des pages et des pages qui n'ont pas de commentaires).
Maintenant, au lieu de faire plusieurs requêtes (une pour chaque page), cela est une seule requête à l'aide de jointures externes pour la connexion
Diary
,Page
etComment
. Comme vous pouvez le voir ci-dessous, cela signifie que l'agenda et les informations de page est retourné plusieurs fois, mais je pense qu'il y a un compromis à trouver entre le fait d'avoir plusieurs DB appels et un peu de redondance de l'information.Note, le code n'est pas particulièrement jolie, parce que vous avez à gérer les ensembles de résultats et de prendre soin de quand une nouvelle page est retourné (c'est pourquoi le
order by
clause est important), mais c'est le genre de chose que les goûts de Hibernate prendre soin de vous sous le capot quand ils sont avec impatience de récupérer (je ne dis pas que Hibernate est mieux ou pas, car j'ai comme l'utilisation de JdbcTemplate pour le contrôle qu'il fournit sur les requêtes que je suis l'émission, mais la mise en veille prolongée (ou JPA) faire beaucoup de levage lourd quand il s'agit de peupler d'objets graphiques).Voir aussi JdbcTemplate#requête
EDIT:
Modifié pour renvoyer tous les journaux, les pages, les commentaires d'un membre.
J'ai juste écrit un très simple query -> sélectionnez d.id.d.creationDate , d.nom.d.description , d.viewtype de Membre m inner join Journal d sur d.membre = m.id où m.id= "4915018864030990478"; Cela me renvoie tous les journaux pour un Membre. Maintenant, chaque journal peut avoir n pages, de sorte que pensez-vous Si je fais plusieurs sous jointures internes à cette requête. Votre one bien sûr, semble bon, mais je voulais savoir si cela est possible ou pas..
Modifié pour traiter tous les journaux pour un membre.
Merci encore. Puis-je faire de cette FullDiaryRowCallbackHandler comme une classe générique. Parce que j'ai besoin de faire de même en bas de la hiérarchie par exemple pour mes pages , des commentaires et ainsi de suite. Je serai vraiment sympa de faire une sorte de générique de code sinon je dois mettre le même code plusieurs fois.
OriginalL'auteur beny23