Projekt

Allgemein

Profil

Herunterladen als
Herunterladen (4,46 KB) Statistiken
| Zweig: | Revision:
4837d174 Christian Ehringfeld
# CuteEntityManager for Qt
7e01cdfa Christian Ehringfeld
1701766b Christian Ehringfeld
[![Build status](https://ci.appveyor.com/api/projects/status/upd727lxpxvvxo2v?svg=true)](https://ci.appveyor.com/project/Professi/cuteentitymanager)
4d57a79b Christian Ehringfeld
7e01cdfa Christian Ehringfeld
## English
With CuteEntityManager it is possible to persist, merge, find or delete
entities. Its functionality is based on JPA's EntityManager. For a
different application I was in search of an easy-to-use ORM. Those particular libraries had either additional dependencies, a smaller
functional range, were too "complicated" to use (imho) or bound to
specific platforms.

CuteEntityManager basically supports all platforms supported by Qt.
Because I am a Java & PHP developer for a living, CuteEntityManager is
conceptionally based on the aforementioned EntityManager of JPA and in
parts on the PHP Yii framework.

CuteEntityManager builds solely on Qt/C++ techniqes. The properties for
the ORM are established by the usage of Q_PROPERTY macros. It is
possible to use inheritance. Of course, relations (ONE_TO_ONE,
MANY_TO_ONE, ONE_TO_MANY and MANY_TO_MANY) are also possible. To
simplify SELECT statements there is a Query API. Thus, it's possible to
implement a whole application with database connection without using a
single bit of SQL. Of course, you should be aware of the "specifics" of
a relational database (notably in matters of relations). Currently, only
SQLite support is passably tested. Extensions for MySQL/PGSQL/MSSQL
should be possible quite smoothly.

CuteEntityManager is definitely far from a proper (and tested) or even
finished state, but because of its use for the creation of another
application, surely this state will successively improve. Criticism,
praise, improvement suggestions, pull requests and code reviews are
welcome at any time. You can reach me directly by mail under
c.ehringfeld[at]t-online.de.

### Features

- sql table creation based on the Q_PROPERTY macro
- relational tables can be generated based on getRelations() method (/* hash.insert("addresses", CuteEntityManager::Relation("addresses",RelationType::MANY_TO_MANY)) */ -> creates table "person_addresses"
- eager data fetch
- CRUD operations with simple method calls (e.g. entitymanager->create(sharedPtr);)
- query api (object-oriented method for building SQL queries)
- Object-Relational Mapping (ORM)
- Multiple instances
f16e1bd3 Christian Ehringfeld
(- every Database Entity must inherit from CuteEntityManager::Entity)
7e01cdfa Christian Ehringfeld
f16e1bd3 Christian Ehringfeld
Updated daily doxygen documentation:
http://jenkins.danfai.de/jenkins/job/cuteentitymanager/doxygen/
4f539d5c Christian Ehringfeld
Tutorial(wip):
https://synlos.net/redmine/projects/entitymanager/wiki/Tutorial

f12670e9 Christian Ehringfeld
### Minimum requirements

- GCC 4.8 or clang 3.3
- >= Qt 5.4
- any platform supported by Qt
7e01cdfa Christian Ehringfeld
4837d174 Christian Ehringfeld
## German
5f1b8502 Christian Ehringfeld
Mit dem CuteEntityManager ist es möglich, Entities zu persistieren, zu
0ec1cbfb Christian Ehringfeld
mergen, zu finden und zu löschen. Die Funktionalität ist dem
EntityManager der JPA nachempfunden. Für eine andere Anwendung war ich
auf der Suche nach einem leicht zu benutzenden ORM. Entweder enthielten
die jeweiligen Librarys zusätzliche Abhängigkeiten, hatten nicht den
gewünschten Funktionsumfang, waren in der Benutzung zu
"kompliziert"(imho) oder an bestimmte Plattformen gekoppelt.
4837d174 Christian Ehringfeld
0ec1cbfb Christian Ehringfeld
Der CuteEntityManager unterstützt grundsätzlich alle von Qt
unterstützten Plattformen. Da ich hauptberuflich Java & PHP Entwickler
bin, ist der CuteEntityManager dem o.g. EntityManager der JPA und zum
Teil dem PHP Yii Framework nachempfunden.

5f1b8502 Christian Ehringfeld
Der CuteEntityManager basiert ausschließlich auf Qt/C++ Techniken. Die
0ec1cbfb Christian Ehringfeld
Properties für das ORM werden anhand von Q_PROPERTY Makros festgelegt.
Es ist möglich Vererbung zu nutzen. Relationen (ONE_TO_ONE, MANY_TO_ONE,
ONE_TO_MANY und MANY_TO_MANY) sind natürlich auch möglich. Um SELECT
5f1b8502 Christian Ehringfeld
Statements zu vereinfachen, gibt es eine Query API. Man kann also ohne
0ec1cbfb Christian Ehringfeld
ein Stückchen SQL eine komplette Anwendung mit SQL-Datenbank Anbindung
implementieren. Man sollte sich natürlich über die "Besonderheiten"
einer relationalen Datenbank im Klaren sein (insbesondere eben bei
Relationen). Aktuell ist nur die SQLite Unterstützung einigermaßen
5f1b8502 Christian Ehringfeld
getestet. Erweiterungen für MySQL/PGSQL/MSSQL sollten relativ problemlos
0ec1cbfb Christian Ehringfeld
möglich sein.

5f1b8502 Christian Ehringfeld
Der CuteEntityManager ist sicherlich weit davon entfernt, in einem guten
0ec1cbfb Christian Ehringfeld
(getesteten) bzw. fertigen Zustand zu sein, da er aber für die
Entwicklung einer anderen Anwendung genutzt wird, wird sich der Zustand
sicherlich fortlaufend verbessern. Kritik, Lob, Verbesserungsvorschläge,
5f1b8502 Christian Ehringfeld
Pull Requests, Code Reviews sind jederzeit willkommen. Man kann mich auf
0ec1cbfb Christian Ehringfeld
direktem Wege per Mail an c.ehringfeld[at]t-online.de erreichen.