JDBC Modèle - Un-À-Plusieurs
J'ai une classe qui ressemble à ceci. J'ai besoin de remplir de, deux tables de base de données, qui sont également indiqués ci-dessous. Est-il préférable de faire cela?
Ma pensée est d'avoir un service de classe pour sélectionner un List<>
via un ResultSetExtractor
à partir d'un DAO. Puis faire un foreach
sur la liste, et sélectionnez un List<>
des e-mails à la personne en passant par un autre ResultSetExtractor
, et l'attacher avec la foreach
boucle.
Est-il une meilleure façon, ou est-ce aussi bon qu'il obtient?
public class Person {
private String personId;
private String Name;
private ArrayList<String> emails;
}
create table Person (
person_id varchar2(10),
name varchar2(30)
);
create table email (
person_id varchar2(10),
email varchar2(30)
);
OriginalL'auteur EdgeCase | 2013-05-09
Vous devez vous connecter pour publier un commentaire.
C'est mieux résolus par un ORM. Avec JDBC, vous avez à faire à la main ce qu'un ORM pour vous. L'exécution de N + 1 requêtes est très inefficace. Vous devez exécuter une seule requête, et de construire vos objets manuellement. Encombrant, mais pas dur:
Il obtient juste les valeurs à partir de la carte, parce que ce que vous voulez probablement comme un résultat de la requête est un ensemble de personnes, et pas une
Map<Long, Person>
. Lire la javadoc deMap.values()
pour obtenir plus de détails.Ou vous pouvez utiliser un
java.util.Set<Person>
oùclass Person { public boolean equals(Object o) { return id == (Person) o.id; public int hashCode() { return id.hashCode(); } }
qui permettrait d'éviter d'appelerMap.values()
qui peut être plus souhaitable pour les performances et la lisibilité.OriginalL'auteur JB Nizet