Giter Site home page Giter Site logo

ahnan4arch / nut Goto Github PK

View Code? Open in Web Editor NEW

This project forked from hamedmasafi/nut

0.0 1.0 0.0 4.94 MB

Advanced, Powerful and easy to use ORM for Qt

License: GNU Lesser General Public License v3.0

C++ 82.55% C 2.25% QMake 2.62% CMake 12.59%

nut's Introduction

Nut

CI build GitLicense Codacy Badge

Advanced, Powerful and easy to use ORM for Qt5

Features

  • Easy to use
  • Support PosgtreSQL, MySQL, SQLite and Microsoft Sql Server
  • Automatically create and update database
  • Support for IDE autocomplete. No hard-coding is needed
  • Detecting table joins
  • Support common C++ and Qt-specific types (Full list)
  • Bulk insertation

Qick start

Create table

sampletable.h

#ifndef SAMPLETABLE_H
#define SAMPLETABLE_H

#include <QtNut/table.h>

class SampleTable : public Nut::Table
{
    Q_OBJECT
    Q_PROPERTY(int id READ id WRITE setId NOTIFY idChanged)
    Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)

    int m_id;
    QString m_name;

    // BEGIN OF NUT MACROS
    NUT_PRIMARY_KEY(id)
    NUT_FIELD(int, id)
    NUT_FIELD(QString, name)
    //END OF NUT MACROS

public:
    explicit SampleTable(QObject *parent = nullptr);

    int id() const;
    QString name() const;

public Q_SLOTS:
    void setId(int id);
    void setName(QString name);

Q_SIGNALS:
    void idChanged(int id);
    void nameChanged(QString name);
};

#endif // SAMPLETABLE_H

sampletable.cpp:

#include "sampletable.h"

SampleTable::SampleTable(QObject *parent) : Nut::Table(parent)
{
    init();
}

int SampleTable::id() const
{
    return m_id;
}

QString SampleTable::name() const
{
    return m_name;
}

QString SampleTable::lastName() const
{
    return m_lastName;
}

void SampleTable::setId(int id)
{
    if (m_id == id)
        return;

    m_id = id;
    Q_EMIT idChanged(m_id);
}

void SampleTable::setName(QString name)
{
    if (m_name == name)
        return;

    m_name = name;
    Q_EMIT nameChanged(m_name);
}

Create database

sampledatabase.h

#ifndef SAMPLEDATABASE_H
#define SAMPLEDATABASE_H

#include <QtNut/Database>

class SampleTable;
class SampleDataBase : public NUT_WRAP_NAMESPACE(Database)
{
    Q_OBJECT
    NUT_DB_VERSION(1)
    NUT_DECLARE_TABLE(SampleTable, items)

public:
    SampleDataBase();
};

#endif // SAMPLEDATABASE_H

sampledatabase.cpp

#include "sampledatabase.h"
#include "sampletable.h"

SampleDataBase::SampleDataBase() : Nut::Database()
  , m_items(new Nut::TableSet<SampleTable>(this))
{

}

Sample codes:

qRegisterMetaType<SampleTable*>();
qRegisterMetaType<SampleDataBase*>();

db.setDriver("QSQLITE");
db.setDatabaseName("data.sb");

if (db.open()) {
    qFatal() << "Unable to open the database";
}


// Read add rows from database
auto list = db.items()->query().toList();
// list is QList<QSharedPointer<SampleTable>>
    
//Select all the people named David.
auto onlyDavids = db.items()->query().where(SampleTable::nameField() == "David").toList();
onlyDavids.at(0)->setName("John"); // change him name to John
db.saveChanges(); // save changed to the database

// Remove all Johns from the database
db.items()->query().where(SampleTable::nameField() == "John").remove();

// Select rows with folowwing ids: 1, 4, 5, 6
db.items()->query().where(SampleTable::idField().in({1, 4, 5, 6}));

// Select from id 10 to 20
db.items()->query().where(SampleTable::idField().between(10, 20));

// Some other samples
db.items()->query().where(SampleTable::idField() <= 7);
db.items()->query().where(SampleTable::idField() > 0 || SampleTable::idField() == -3);
db.items()->query().where(SampleTable::idField() > 10 && (SampleTable::nameField() == "John" || SampleTable::nameField() == "Jim"));

// Select biggest id
auto biggestId = db.items()->query().max(SampleTable::idField());

Getting started

Help needed!

We need more documentation or wiki. If you can help to improve docs please fork now!

Technology sponsership

Thanks to JetBrains to their useful IDEs.

JetBrains Logo (Main) logoCLion logo

nut's People

Contributors

amreisa avatar bodhi369 avatar hamedmasafi avatar jacklilhammers avatar martonmiklos avatar nickaein avatar soyoo avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.