JPA vs Printemps JdbcTemplate
Pour un nouveau projet est JPA toujours l'outil recommandé pour la manipulation de données relationnelles ou il y a des scénarios où le Printemps JdbcTemplate est un meilleur choix? Certains facteurs à considérer dans votre réponse:
- nouveau schéma de base de données vs pré-existantes, de schémas et de tableaux
- niveau de développement de l'expertise
- facilité avec laquelle peut s'intégrer à une mise en cache des données de la couche
- performance
- de tout autre facteur pertinent à prendre en considération?
- Un facteur supplémentaire que vous souhaitez à considérer est la normalisation.
Vous devez vous connecter pour publier un commentaire.
Ressort JdbcTemplate si vous ne souhaitez pas accéder à votre schéma de base de données par l'intermédiaire d'un modèle de domaine. À l'aide de JdbcTemplate vous utilisez un niveau inférieur d'accès, avec plus de souplesse, mais sans doute aussi les plus passe-partout.
Printemps JdbcTemplate peut être plus facilement utilisé exotiques avec des schémas de base de données et une procédure stockée se concentrer. En utilisant JPA, vous devez vous assurer que le schéma de base de données correctement les cartes pour le modèle de domaine.
Les deux technologies ont besoin de développeurs connaissant les bases de données relationnelles, SQL et des transactions. Avec JPA, vous obtenez plus de complexité cachée bien.
JPA est à ma connaissance plus facilement connectable à la mise en cache des données des couches, car l'objet orienté vers les rend entrée de cache d'identification, de mise à jour et d'invalidation plus facile.
Vous pouvez affiner JdbcTemplate base de backends mieux, mais il est pour la plupart des cas, plus de code.
Un autre aspect à considérer est que, bien que avec JPA, vous obtenez un modèle de domaine pour votre schéma de base de données, vous aurez souvent besoin d'utiliser d'autres DTO classes. À l'aide de JdbcTemplate, vous pouvez directement utiliser avec DTO classes.
Je suis un peu en retard pour ce post, mais j'ai tendance à utiliser JdbcTemplate plus de la moraine d'oak ridges. Je sais SQL (assez bien) et ne veux vraiment pas être "abstrait" loin de ma DB. Je trouve la plupart du temps, mes applications sont à l'aide de DB vues où je pousse plus logique d'affaires jusqu'à. J'ai correctement en couches DAOs qui ont JdbcTemplate implémentations. Il se sent "propre" et plus passe-partout de code est caché par JdbcTemplate (et c'est la documentation en ligne semble BEAUCOUP mieux que d'ORM genre de trucs). Le peu de temps que j'ai utilisé quelque chose comme Hibernate, j'ai trouvé quand il travaillait, il me sauver un peu de temps...mais quand il ne fonctionnait pas correctement, il m'a coûté jours de "WTF" de débogage. Je n'ai jamais eu à passer plus de 20 minutes de débogage JdbcTemplate DAO impls. Je pense que la clé, comme d'autres l'ont noté, est la façon dont vous êtes à l'aise avec SQL /la Conception d'un Schéma
Je suis d'accord avec @Timo. La seule autre aperçu, je voudrais ajouter/développer est que les ORM ont des sémantiques différentes de pur sql accès à vos données.
Le point de l'ORM est de faire abstraction du fait que vos données sont dans une base de données à tous, autant que possible. Lorsque vous utilisez l'ORM correctement, toutes les opérations de persistance sont traitées dans un (je l'espère), en couche mince. Votre modèle des objets ont peu ou pas de code de persistance; le fait que vous êtes à l'aide de l'ORM doit être invisible à votre modèle.
De ce fait, l'ORM est très bon à faire de votre vie plus facile pour certains types d'opérations, à savoir de simples opérations CRUD. Vous pouvez charger vos objets de modèle, de les présenter, de les mettre à jour, de les supprimer tout à fait facilement. Il rend votre vie plus facile parce que quand vous accéder à vos données, vous obtenez des objets de modèle, sur lequel vous pouvez écrire une logique d'entreprise. Si vous utilisez JDBC, vous aurez pour "hydrater" votre instances de l'objet à partir des données, qui peut être compliquée et sujette à erreur.
ORM n'est pas toujours le meilleur choix. JPA est un outil pour un travail, si l'outil n'est pas suffisant pour le travail, vous voulez trouver un meilleur outil. Par exemple, j'avais un scénario où j'ai dû copier la totalité d'un objet graphique et enregistrer une nouvelle copie de ces objets. Si j'avais utilisé de l'ORM (comme j'ai essayé de faire), j'ai eu à charger tous les objets de la base de données, puis de les copier, puis enregistrez les nouveaux objets. J'ai pris beaucoup trop de temps.
La meilleure solution était d'utiliser jdbc en fonction des opérations et à insérer via, sélectionnez " appels sql pour créer les nouvelles lignes. Il a été rapide, le code est plus simple.
L'autre chose à considérer est que vous êtes à l'aise avec JDBC, et ont des délais, vous n'avez pas à sauter sur l'ORM train en marche. Le Printemps JdbcTemplate classes sont extrêmement puissant et utile. Parfois, le meilleur outil est celui que vous connaissez. Vous devriez vous familiariser avec l'ORM, mais pas nécessairement pour un projet avec des attentes élevées. Il y a beaucoup à apprendre et il n'est pas trivial, vraiment vous faites du commerce un ensemble de complexité avec un autre dans le choix de l'utilisation de jdbc vs orm.
Il n'est pas mentionné dans les autres réponses, mais il est bien d'utiliser les deux. Dans mon Application j'utilise JPA et JdbcTemplate, pour des opérations de type crud-je utiliser JPA mais pour les rapports ou où il est plus facile j'utilise jdbcTemplate.
La grande chose au sujet du Printemps, c'est que l'exception de la traduction de JPA exceptions au printemps Dao exception de la hiérarchie travaille à la fois avec JPA et jdbcTemplate. Donc, utiliser JPA lorsque cela a du sens et jdbcTemplate lorsque cela a du sens.
getSomeReport()
êtrethis.jdbcTemplate. ...
plutôt quethis.entityManager. ...
?Au travail, nous utilisons Hibernate JDBCTemplate car il offre plus de souplesse. Il dispose également de meilleures performances que JPA parce que vous n'êtes pas "chargement" beaucoup de données inutiles dans votre application.
Dans le JDBCTemplate cas, vos compétences SQL aller un long chemin à vous donner exactement ce dont vous avez besoin à la bonne vitesse.