QxOrm >> Accueil | Version courante : QxOrm 1.2.2 (LGPL) - documentation en ligne de la bibliothèque QxOrm |  |  |  |

QxOrm est une bibliothèque C++ de gestion de données. QxOrm a pour ambition d'être utilisé dans de nombreux projets, à la fois open-source et professionnels. A partir d'une simple fonction de paramétrage (que l'on peut comparer 'modestement' avec un fichier de mapping Hibernate), vous aurez accès aux fonctionnalités suivantes : persistance : communication avec de nombreuses bases de données (avec support des relations 1-1, 1-n, n-1 et n-n) serialization des données (flux binaire et XML) reflection (ou introspection) pour accéder aux classes, attributs et invoquer des méthodes QxOrm a pour objectif de simplifier le code C++ tout en offrant un maximum de fonctionnalités. Voici les principaux avantages de QxOrm : | QxOrm library has been accepted into the Qt Ambassador Program
non intrusif : la fonction de paramétrage se trouve à l'extérieur des classes. La signature des classes n'est donc pas modifiée. QxOrm peut donc être utilisé dans des projets existants aucune nécessité d'appartenir à une hiérarchie de classes : les classes n'ont pas besoin de dériver d'un 'super objet' pas de génération automatique de code pas de mapping XML 1 seul fichier <QxOrm.h> à inclure dans l'en-tête précompilé (precompiled-header nécessaire pour optimiser les temps de compilation) aucune nécessité d'utiliser le pré-compilateur 'moc' fourni par Qt vérification des types à la compilation (utilisation intensive de méta-programmation) compatible avec Visual C++ 2008 ou 2010 sous Windows, GCC 4.4.1 sous Linux et Mac OS X, et MinGW sous Windows (d'autres environnements et plateformes seront testés prochainement : mobiles, etc...) compatible avec le développement de bibliothèques partagées (shared library, *.dll pour Windows, *.so pour Linux, etc...) QxOrm est dépendant des excellentes bibliothèques boost (compatible à partir de la version 1.38) et Qt (compatible à partir de la version 4.5.0) :
| boost : de nombreux modules de la bibliothèque boost font partie de la nouvelle norme C++. C'est une bibliothèque reconnue pour sa qualité, son code 'C++ moderne', sa documentation, sa portabilité, etc... QxOrm utilise les fonctionnalités suivantes de boost : smart_pointer, serialization, type_traits, multi_index_container, unordered_container, any, tuple, foreach, function. Il est conseillé d'installer et d'utiliser la dernière version de boost disponible à l'adresse suivante : http://www.boost.org/
| Qt : bibliothèque complète : IHM (QtGui), réseau (QtNetwork), XML (QtXml), base de données (QtSql), etc... La documentation est excellente et le code C++ écrit à partir de cette bibliothèque est à la fois performant et simple de compréhension. Depuis le rachat par Nokia et sa nouvelle licence LGPL, Qt est sans contexte la bibliothèque phare du moment. QxOrm est compatible avec les principaux objets définis par Qt : QObject, QString, QDate, QTime, QDateTime, QList, QHash, QSharedPointer, QScopedPointer, etc... Il est conseillé d'installer et d'utiliser la dernière version de Qt disponible à l'adresse suivante : http://qt.nokia.com/
QxOrm est divisé en sous-modules, voici un descriptif rapide : QxDao : basé sur le moteur QtSql de Qt, ce module permet de communiquer (sélection, modification, suppression, transaction, etc...) avec de nombreuses bases de données en mappant chaque champ d'une table avec les propriétés d'une classe C++. Les relations de type 1-1, 1-n, n-1 et n-n sont très simples à mettre en place dans le code C++. Ce module supporte la programmation objet : héritage, polymorphisme, composition, association ainsi que les collections (support des collections de stl, boost et Qt : std::vector, std::list, boost::unordered_map, QList, QHash, etc...). QxRegister, QxDataMember et QxFunction : même si ce n'est pas le but 1er de QxOrm, il est nécessaire d'émuler le mécanisme de reflection (ou introspection) présent nativement dans d'autres langages (Java, C#, etc...) pour utiliser toutes les fonctionnalités de QxOrm. QxService : basé sur le moteur QtNetwork de Qt, ce module permet de créer de manière simple et performante un serveur d'applications en C++ (notion de services avec demande du client et réponse du serveur). QxService utilise la serialization et l'introspection des données et fonctions pour pouvoir faire transiter sur le réseau n'importe quelle classe ou structure. Pour plus d'informations sur ce module, un tutoriel est disponible en cliquant ici. QxCollection<Key, Value> : basé sur boost::multi_index_container, cette collection permet de cumuler les avantages d'un std::vector<T> (conserve l'ordre d'insertion + accès rapide par index) et d'un boost::unordered_map<Key, Value> ou encore QHash<Key, Value> (accès rapide par clé : hash-map). Ce type de collection est particulièrement adapté pour contenir les éléments issus d'une base de données. QxSerialize : ce module s'appuie sur l'excellente bibliothèque boost::serialization. Toute classe définie par QxOrm peut être sérializée dans un flux binaire et XML. Ce module permet également de cloner toutes les instances d'objet. Les principaux objets de la bibliothèque Qt (QObject, QString, QDate, QTime, QDateTime, QList, QHash, etc...) sont compatibles avec le module QxSerialize. Ce module assure une compatibilité ascendante avec prise en compte d'un n° de version par classe. QxFactory : toute instance d'objet définie par QxOrm peut être créée en fonction du nom de la classe. QxTraits : ce module contient une liste de classes de traits non définies dans boost et qui sont utiles pour l'utilisation de QxOrm. Ces classes de traits se veulent génériques et peuvent donc être utilisées dans d'autres contextes que celui de la bibliothèque QxOrm. QxCache : le 'cache' de QxOrm peut contenir tous types d'objets. Il peut permettre par exemple de mémoriser des données issues d'une base de données pour éviter des requêtes trop fréquentes. Ce cache est générique et peut être utilisé dans d'autres contextes que celui de QxOrm. QxValidator : ce module permet d'ajouter des contraintes sur les propriétés enregistrées dans le contexte QxOrm. Ces contraintes sont définies dans la méthode de mapping : void qx::register_class. Si pour une instance de classe donnée, au moins une contrainte n'est pas respectée, alors l'instance est considérée comme invalide : l'objet ne peut alors pas être sauvegardé en base de données (INSERT ou UPDATE). Pour plus d'informations sur le module QxValidator, rendez-vous sur la FAQ de QxOrm. QxMemLeak : permet une détection rapide des fuites mémoire en mode Debug une fois l'exécution du programme terminée (avec indication du fichier et de la ligne => style MFC de Microsoft). Ce module a été développé par Wu Yongwei et a subi quelques modifications pour être intégré dans QxOrm. Si un autre outil est déjà utilisé dans vos projets (Valgrind par exemple), cette fonctionnalité ne doit pas être activée. Par défaut, le module QxMemLeak est désactivé. Vous pouvez télécharger la dernière version de QxOrm en cliquant ici. Un exemple rapide d'utilisation de QxOrm montrant les fonctionnalités de base de la bibliothèque est disponible en cliquant ici. Un forum (en anglais) dédié à QxOrm est disponible en cliquant ici. Vous pouvez également retrouver la communauté française de QxOrm sur le forum de Developpez.com. Une documentation en ligne du code source de la bibliothèque QxOrm est disponible en cliquant ici. Pour informations et afin de pouvoir faire une comparaison, voici une liste d'autres bibliothèques permettant de mapper des classes C++ avec des bases de données : DTL : http://dtemplatelib.sourceforge.net/ SOCI : http://soci.sourceforge.net/ Hiberlite : http://code.google.com/p/hiberlite/ LiteSQL : http://sourceforge.net/apps/trac/litesql/ Debea : http://debea.net/ Wt::Dbo : http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html QDjango : http://opensource.bolloretelecom.eu/projects/qdjango/ QtPersistence : http://sourceforge.net/projects/qtpersistence/ QsT SQL Tools : http://sourceforge.net/projects/qstsqltools/