J'utilise le ressort Y a-t-il une meilleure pratique pour cela? P> jdbctemplate code> avec le motif DAO pour accéder à une base de données. Au lieu de créer manuellement les tables de base de données, je cherche un moyen de générer les tables de la couche DAO.
Je comprends que je peux utiliser le
jdbctemplate code> pour exécuter des déclarations, je ne cherche que le bon endroit pour le faire. p>
3 Réponses :
Utilisez .UPDate () code> Méthodes disponibles dans le
(simple) jdbcoperations code>, le nombre qu'ils renvoyent est le nombre de lignes affectées. Ils sont censés être spécifiquement utilisés pour les deux
insert code> et
Mettre à jour les déclarations code>. P>
Il demande comment créer une table, pas comment mettre à jour un
.UPDATE () code> est destiné à ceux-là aussi. Fondamentalement, toutes les autres méthodes sont pour SELECTS,
.UPDATE () CODE> est pour tout le reste.
légèrement hors top: p>
Est-il absolument nécessaire que vous ayez besoin d'exécuter les commandes DDL de votre code? En fait, je pense que c'est une bonne idée d'avoir la séparation entre l'utilisation de DB Admin et DB. Notre configuration de sécurité de base de données Oracle est réellement configurée pour que les tables soient configurées à l'aide d'un utilisateur de base de données différent (db_owner), que celui qui exécute les SELECTS, les insertions, les suppressions sont exécutées par DB_USER. P>
Cela empêche de supprimer accidentellement des tables ou de modifier le schéma et permet également de configurer le DB_User de sorte que seuls les privilèges absolument nécessaires sont accordés, ce qui ajoute une couche de sécurité. P>
Je suppose que cela dépend de la nature de votre service / de votre application, mais réfléchissez à l'avantage de la création des tables à l'intérieur du code (et si un éventuel bogue dans le code DDL pourrait détruire accidentellement les données de production). p>
Oui, d'accord sur cela, nous avons l'habitude d'avoir db_user qui ne peut sélectionner et appeler la procédure que, donc si vous arrivez à ce que les pirates pirateuses volent en quelque sorte usernam / passe (utilisée par application exposée sur Web par exemple), ils ne peuvent sélectionner que dans la base de données. . Ou ils peuvent appeler la procédure stockée, qui gérera des chèques avant et insérera quelque chose qui quittera la base de données dans un état cohérent, de sorte que les dommages seraient plus petits.
Supposons que vous fassiez une nouvelle installation, distribuez-vous une autre application pour exécuter votre DDL ou faites-vous regrouper la DDL et avoir une logique d'installation dans votre application?
Je suppose que cela dépendrait du type d'application à l'aide de la base de données. Dans beaucoup d'environnement de production, avoir un script DDL distinct est absolument nécessaire pour remettre à l'équipe DBA qui approuvera ensuite les modifications avant d'exécuter le script et que les développeurs de code n'auraient aucun accès à la base de données de production et à avoir l'application. Modifier le DB serait un non-no-non. Cela dit, Afaik Hibernate peut générer automatiquement les tables pour vous, bien que personnellement, je ne l'utiliserais pas, car les noms d'index et de contrainte sont illisibles, ce qui rend la maintenance dB plus compliquée.
Vous pouvez utiliser le Méthode Execute (String) :
public void execute(String sql) throws DataAccessException
2 mots: tests d'intégration
Créer des tables par programme est une odeur. Dans le monde réel (et avec de bons datamodels), vous devez normalement créer des tables une seule fois et les utiliser pour toujours. Êtes-vous sûr b> vous devez le faire? Sinon, veuillez poster une nouvelle question comment modifier le DataModel afin de ne pas avoir besoin de créer une nouvelle table pour chaque HICCUP.
+1 pour le balusc. Si vous souhaitez une manière reproductible, automatisée de créer des tables, créez un DDL ou un autre script pouvant être exécuté lorsque votre environnement est configuré. En d'autres termes, cela ne devrait pas être traité en code.
@Ballusc, un lieu logique pour exécuter une configuration DDL pourrait être une opération d'installation, qui pourrait être distribuée dans le cadre de votre code - pourquoi ajoutez quelque chose d'autre que le DAO actuel pour faire face à cette étape souvent nécessaire?
Je conviens que c'est dangereux pour la production, mais je trouve que la création des tableaux du code économise une tonne de temps pour le prototypage et la mise en place rapide des environnements de développement locaux. J'aime créer un profil Maven pour vous assurer que je n'exécute pas accidentellement le code de chute de table / Créer un code contre les configurations de production. Par exemple, il est parfois super commode de remettre le code à un autre développeur et de leur dire de simplement exécuter quelque chose comme:
MVN -PPrototype jetty: exécutez code>.