Java JDBC vs JPA pour l'application de base de données
J'aimerais préface, que je suis un peu un novice à la recherche de conseils car je suis en train de construire de bonnes habitudes.
L'application que je suis en développement maintenant il est fortement intégré de base de données de l'application. Comme je l'ai développer et d'explorer et de mettre en œuvre les exigences de chacun de mes entités, je trouve que mes cours sont juste exploser avec un code pour exécuter des requêtes de différentes manières sur chacune des entités.
Alors qu'il pourrait ne pas être une mauvaise chose dès maintenant, en termes de maintenance, je pense que ma demande d'être un cauchemar pour le débogage et la mise à jour.
Faire tout JDBC experts ont des suggestions pour la conception des modèles qui allait l'aider à mince vers le bas de la chaudière-type de plaque code pour la manipulation de l'ensemble de ces questions? Ou devrais-je écarter complètement et utiliser JPA?
J'ai essayé de mettre en œuvre JPA dans le passé, mais ont eu du mal avec l'entité complexe de relations. Dois-je viens de lire un JPA livre et à partir de là?
OriginalL'auteur Zach | 2011-07-22
Vous devez vous connecter pour publier un commentaire.
JPA peut être une bonne solution à long terme. Mais si vous préférez rester plus près de la plaine de SQL, vous pouvez envisager d'autres options comme les Le Framework Spring JDBC de soutien.
Notez que vous n'avez pas besoin d'utiliser de printemps d'autres composantes du cadre link DI, MVC, etc pour être en mesure d'utiliser Spring JDBC. Il est calme, facile à utiliser sans autres parties du framework spring.
Lors de l'utilisation de spring jdbc, vous ne pas besoin de faire les tâches suivantes dans votre code:
Ce que vous devez faire est de:
Un autre avantage de printemps-jdbc est qu'il remplace JDBC checked exceptions avec décoché exceptions.
Donc, je suis confus, pourquoi pas Cochée exceptions mieux que les exceptions?
Voir les exceptions débat pour un regard détaillé sur les avantages et les inconvénients de checked exceptions vs décoché exceptions.
OriginalL'auteur Tahir Akhtar
Quelle que soit la solution que vous utilisez, être directement JDBC ou JPA, assurez-vous de briser votre code en morceaux qui peuvent être facilement remplacées lorsque vient le temps de changer technologies.
L'inconvénient avec JDBC est que vous pouvez vous retrouver avec la mise en œuvre du code spécifique (Oracle, MS, MySQL, etc.) Cela peut être une vraie douleur à migrer loin de si vous décidez de changer les choses en bas de la route.
J'ai fini par étudier sur Hibernate, et le livre Exploiter Hibernate m'a tout à fait les moyens de faire ce genre de développement (et a également porté Printemps et Maven pour la balade, par des moyens qui, lentement, se construit sur le dessus de l'un l'autre.)
Ce que vous devriez vous retrouver avec, indépendamment de l'approche sont les suivants:
Objets DAO -- ces Objets d'Accès aux Données permettra de faire vos opérations CRUD (create, update, et delete) et devrait être de base de données agnostique.
Modèle d'objets: ceux-ci devraient représenter vos données, et sera probablement regarder un peu comme Java représentations d'une seule ligne dans une table de base de données. Classes DAO sera de retour de ces, ou des listes de ces.
Exploiter Hibernate décrit un modèle dans les chapitres suivants (après qu'il ait jeté Printemps à vous), où vous allez l'utiliser essentiellement de deux couches de classes DAO. Le plus haut niveau de la classe DAO va instancier (ou de permettre que soit injecté) une mise en œuvre spécifique de la classe DAO.
Donc, disons que vous avez un EMPLOYÉ table de base de données. Ainsi, vous créez un objet de modèle Employé qui détient toutes les données d'une ligne dans la table EMPLOYÉ détient. Maintenant, vous créez une classe DAO appelé EmployeeDAO qui implémente les suivantes:
Votre première pensée serait de mettre vos appels JDBC. Mais ne pas le faire. Au lieu de cela, vous pouvez maintenant écrire un autre DAO pour l'Employé, et celui-ci mettra en œuvre tous vos appels JDBC. (En supposant que vous allez JDBC):
Maintenant les méthodes de EmployeeDAO? Ils suffit d'instancier EmployeeJdbcDAO, et d'appeler la méthode appropriée. Quand vient le temps sur la route pour passer à Oracle avec mise en veille prolongée, vous créez une nouvelle classe DAO appelé quelque chose comme EmployeeOrHibDAO, écrire Hibernate et Oracle code spécifique de l'il, et puis au lieu de l'appeler EmployeeJdbcDAO dans EmployeeDAO, vous instanciez EmployeeOrHibDAO à la place. (Et avec le Printemps, vous n'avez même pas changer le code. Vous venez de changer votre Printemps DI configuration.)
Il est appelé à Exploiter la mise en veille prolongée. Il est lié dans le post original.
Merci pour le lien pour une description du modèle. Et de ça, voici une description de la DAO composant de: "La DataAccessObject est l'objet principal de ce modèle. Le DataAccessObject résumés les données sous-jacentes d'accès de mise en œuvre de la BusinessObject pour permettre un accès transparent à la source de données. Le BusinessObject également des délégués de chargement des données et des opérations de banque pour le DataAccessObject." Où dans le présent document, faut-il dire qu'il ne peut pas abstrait JDBC à la mise en œuvre? En fait, il NE va jusqu'à dire qu'il n'a même pas à être un SGBDR mise en œuvre.
Nous ne parlons pas de l'écriture d'un ORM. Nous parlons de l'écriture d'un DAO pour abstraite de base des opérations CRUD. Créer, Lire, mettre à Jour et Supprimer. L'ensemble de ces méthodes (qui s'appelle dans le DAO schéma que vous m'a indiqué à l') peut être facilement mis en œuvre à l'aide d'un ORM comme Hibernate, ou JDBC. Je soupçonne la plupart des applications (certainement ceux que j'ai travaillé sur), vous pouvez obtenir par sans les méthodes de la liste. De plus, j'pensons que la question d'origine d'un début d'application, et rien tout à fait comme je ne sais pas, avancé que ce que vous êtes apparemment en train de parler.
Une chose que j'aime à propos de la communauté Java . . . ils favorisent les solutions technologiques vs marketspeak. Comme Unices (pluriel Unix), qui sont "tout est fichier" accès aux ressources et de noyau avec des couches de services et d'applications à travers le noyau. (CR) de Sorte à ma façon de penser, la plus récente de la promotion de la JPA pour l'accès à la base est une forme STANDARDISÉE, les meilleures pratiques de l'encapsulation de l'abstraction et de la nouvelle direction de développement devrait aller. C'est technologiquement supérieur et inférieur de l'entretien.
OriginalL'auteur Marvo
Pas un réel réponse, mais, je ne pense qu'il est important de jeter un couple de plus d'options dans le mélange qui peut vous aider à trouver un bon terrain d'entente. Je propose cela parce que une implémentation JPA sur une base de données existante avec beaucoup de complexité et les requêtes peuvent être un peu gênant pour quelqu'un sans une juste part des cicatrices de bataille. Considérez ce qui suit, mais faire de la recherche et la construction de certains traceur balle apps;
Des applications simples qui n'ont pas besoin de la JPA, les bagages ou les bases de données patrimoniales que je vais passer plus de temps de montage dans JPA que la simple construction de certaines DAOs.
OriginalL'auteur Michael J. Lee
Si vous cherchez à acquérir de bonnes habitudes, je lirais Code Complet 2 par Steve McConnell.
OriginalL'auteur Alan B. Dee
Ne pas jeter un modèle d'enregistrement active comme une option. Qui n'a pas à être un EJB entité approche. Le modèle est intéressant de mentionner à mon humble avis
OriginalL'auteur evildethow