ORM Technologies vs JDBC?
Ma question est au sujet de l'ORM et JDBC technologies, sur quels critères vous décidez d'aller pour un ORM de la technologie par rapport à JDBC et les autres sens ?
Grâce.
Vous devez vous connecter pour publier un commentaire.
Complexité.
ORM Si votre demande est pilotée par domaine et les relations entre les objets est complexe ou si vous avez besoin d'avoir cet objet définition de ce que l'app n'.
JDBC/SQL Si votre application est assez simple de simplement présenter les données directement à partir de la base de données ou les relations entre eux est assez simple.
Le livre "les Modèles de l'architecture des applications d'entreprise" par Martin Fowler explique beaucoup mieux les différences entre ces deux types:
Voir: Modèle De Domaine et Transaction Script
JDBC
HIBERNATE.
Je crois que vous avez oublié de regarder "Fonctionnelle Relational Mapping"
Je voudrais conclure en disant:
La force de divers "Relational Mapping" technologies est la portabilité: vous vous assurer que votre application fonctionnera sur la plupart des ACIDES bases de données.
Sinon, vous aurez à composer avec les différences entre les différents dialectes SQL lorsque vous écrivez manuellement les requêtes SQL.
Bien sûr, vous pouvez limiter vous-même à la norme SQL92 (et puis faire un peu de Programmation Fonctionnelle) ou vous pouvez réutiliser certains concepts de la programmation fonctionnelle avec ORM cadres
L'ORM forces sont construites sur un objet de session qui peut agir comme un goulot d'étranglement:
Néanmoins, ses atouts sont aussi ses faiblesses:
La session doit être en mesure de comparer les objets de sorte que vous besoin de implémente égale/méthodes hashCode
Mais les Objets de l'égalité doit être ancrée sur "les Clés d'Entreprise" et pas l'id de base de données (nouveaux objets transitoires ont aucune ID de base de données!).
Cependant, certains réifiée concepts n'ont pas d'affaires de l'égalité (une opération par exemple).
Une solution de contournement commune s'appuie sur les Guid qui tendent à bouleverser administrateurs de base de données.
La session doit espion relation changements, mais ses règles de mappage de pousser l'utilisation des collections inadaptés pour l'entreprise algorithmes.
Parfois, votre souhaitez utiliser une HashMap mais l'ORM nécessitera la clé à un autre "Domaine Riche en Objet" à la place d'une autre lumière...
Ensuite, vous avez à mettre en œuvre l'objet d'égalité sur le domaine riche en objet agissant comme l'un des principaux...
Mais vous ne pouvez pas parce que cet objet n'a pas d'équivalent sur le monde de l'entreprise.
Si vous tomber en arrière, à une simple liste que vous avez pour itérer sur (problèmes de performances et de résultats à partir de)
L'ORM de l'API sont parfois inadaptés pour l'utilisation dans le monde réel.
Par exemple, dans le monde réel, les applications web essayer d'appliquer session d'isolation par l'ajout de certains "OÙ" clauses lorsque vous récupérer les données...
Alors la "Session.get(id)" ne suffit pas et vous devez vous tourner plus complexe DSL (HSQL, les Critères de l'API) ou de retourner à l'natif SQL
La base de données des objets de conflits avec d'autres objets dédiés à d'autres cadres (comme OXM cadres = Objet/XML Mapping).
Par exemple, si le REPOS de l'utilisation des services de jackson bibliothèque de sérialiser un objet métier.
Mais ce Jackson exactement les cartes à une veille prolongée de l'Un.
Alors soit vous fusionner les deux et un couplage fort entre votre API et votre base de données s'affiche
Ou vous devez mettre une traduction et tout le code que vous avez enregistré à partir de l'ORM est perdu là...
De l'autre côté, la FRM est un compromis entre le "Mapping Objet-Relationnel" (ORM) et natif de requêtes SQL (avec JDBC)
La meilleure façon d'expliquer les différences entre FRM et ORM consiste dans l'adoption d'une approche DDD.
Il libère des contraintes de la mettre sur l'ORM de la session et s'appuie la plupart du temps, sur DSL sur le SQL (si la portabilité n'a pas d'importance)
Mais d'un autre côté, il faut regarder dans les détails de la transaction, la simultanéité des problèmes
Liste des personnes = queryFactory.selectFrom(personne)
.où(
personne.prénom.eq("John"),
personne.lastName.eq("Doe"))
.fetch();
Il dépend également de la courbe d'apprentissage.
Ebean ORM a un joli bas de la courbe d'apprentissage (simple API, le langage de requête simple) si vous êtes assez heureux avec les annotations JPA pour la cartographie (@Entity, @Tableau, @OneToMany, etc).