在linux系统中使用QxOrm框架2:自己的工程使用QxOrm框架

在看本文之前,请先处理好QxOrm环境,详见这里

本文目的:
通过QxOrm,实现某类的增删改查。
本文目录:
一、环境
二、代码


一、环境

1、新建Qt项目

项目结构如下,主要添加红框中的5个文件


image.png

2、添加环境变量

为以后开发方便,在/etc/profile中添加QxOrm的根目录

export QXORM_DIR=/mnt/hgfs/vm_share/source/QxOrm_1.4.5/QxOrm

如果QtCreator中不生效,则重启虚拟机。

3、修改pro文件

添加内容如下

# --------- QxOrm start ---------
QMAKE_CXXFLAGS += -std=c++0x

include($$(QXORM_DIR)/QxOrm.pri)

TEMPLATE = app
INCLUDEPATH += $$(QXORM_DIR)/include/
LIBS += -L"$$(QXORM_DIR)/lib"


CONFIG(debug, debug|release) {
TARGET = qxBlogd
LIBS += -l"QxOrmd"
} else {
TARGET = qxBlog
LIBS += -l"QxOrm"
} # CONFIG(debug, debug|release)
# --------- QxOrm end ---------

二、代码

1、 precompiled.h

#ifndef _QX_BLOG_PRECOMPILED_HEADER_H_
#define _QX_BLOG_PRECOMPILED_HEADER_H_

#include <QxOrm.h>
// 原例子中通过export.h控制dll文件在不同时期的状态,
// 我们是在linux下使用,不确定是否需要。。。
//#include "export.h"

#endif // _QX_BLOG_PRECOMPILED_HEADER_H_

可以将一些一起用到的头文件放入该文件中,加速编译(官网解释)。

2、author.h

#ifndef _QX_BLOG_AUTHOR_H_
#define _QX_BLOG_AUTHOR_H_

#include "database/precompiled.h"

class QX_DLL_IMPORT_HELPER author
{
public:
// -- enum
   enum enum_sex { male, female, unknown };
// -- properties
   QString     m_id;
   QString     m_name;
   QDate       m_birthdate;
   enum_sex    m_sex;
// -- contructor, virtual destructor
   author() : m_id("0"), m_sex(unknown) { ; }
   virtual ~author() { ; }
// -- methods
   int age() const;
};

QX_REGISTER_PRIMARY_KEY(author, QString)
QX_REGISTER_HPP_IMPORT_DLL(author, qx::trait::no_base_class_defined, 0)

typedef qx::QxCollection<QString, author*> list_author;

#endif // _QX_BLOG_AUTHOR_H_

原例子中使用到了std::shared_ptr等c++11的函数,因为本人的环境不兼容,因此没用c++11的内容。

3、author.cpp

#include "author.h"

#include <QxOrm_Impl.h>
QX_REGISTER_CPP_IMPORT_DLL(author)

namespace qx {
    template <> void register_class(QxClass<author> & t)
    {
       t.id(& author::m_id, "author_id");

       t.data(& author::m_name, "name");
       t.data(& author::m_birthdate, "birthdate");
       t.data(& author::m_sex, "sex");

    //   t.fct_0<int>(std::mem_fn(& author::age), "age"); // using std::mem_fn() here is just a workaround for an issue with some versions of MSVC, it is not required with a full compliant C++11 compiler (http://stackoverflow.com/questions/23778883/vs2013-stdfunction-with-member-function)
       t.fct_0<int>(& author::age, "age");
    }
}

int author::age() const
{
   if (! m_birthdate.isValid()) { return -1; }
   return (QDate::currentDate().year() - m_birthdate.year());
}

4、 databasehelper.h

#ifndef DATABASEHELPER_H
#define DATABASEHELPER_H

#include <QObject>

class DatabaseHelper : public QObject
{
    Q_OBJECT
public:
    explicit DatabaseHelper(QObject *parent = 0);
    
signals:
    
public slots:
    
private:
    void init();
};

#endif // DATABASEHELPER_H

5、databasehelper.cpp

#include "databasehelper.h"
#include <QFile>
#include "precompiled.h"
#include <QDebug>
#include "../bean/author.h"
DatabaseHelper::DatabaseHelper(QObject *parent) :
    QObject(parent)
{
    init();
}


void DatabaseHelper::init()
{
    QFile::remove("./qxBlog.sqlite");

    // Parameters to connect to database
    qx::QxSqlDatabase::getSingleton()->setDriverName("QSQLITE");
    qx::QxSqlDatabase::getSingleton()->setDatabaseName("./qxBlog.sqlite");
    qx::QxSqlDatabase::getSingleton()->setHostName("localhost");
    qx::QxSqlDatabase::getSingleton()->setUserName("root");
    qx::QxSqlDatabase::getSingleton()->setPassword("");
    qx::QxSqlDatabase::getSingleton()->setFormatSqlQueryBeforeLogging(true);

    // Only for debug purpose : assert if invalid offset detected fetching a relation
    qx::QxSqlDatabase::getSingleton()->setVerifyOffsetRelation(true);

    // Create all tables in database
    QSqlError daoError = qx::dao::create_table<author>();

    // Create a list of 3 author
//    author author_1; author_1.reset(new author());
//    author author_2; author_2.reset(new author());
//    author author_3; author_3.reset(new author());

    author author_1;
    author author_2;
    author author_3;

    author_1.m_id = "author_id_1"; author_1.m_name = "author_1";
    author_1.m_sex = author::male; author_1.m_birthdate = QDate::currentDate();
    author_2.m_id = "author_id_2"; author_2.m_name = "author_2";
    author_2.m_sex = author::female; author_2.m_birthdate = QDate::currentDate();
    author_3.m_id = "author_id_3"; author_3.m_name = "author_3";
    author_3.m_sex = author::female; author_3.m_birthdate = QDate::currentDate();

    list_author authorX;
    authorX.insert(author_1.m_id, &author_1);
    authorX.insert(author_2.m_id, &author_2);
    authorX.insert(author_3.m_id, &author_3);

    // 插入多条记录
    daoError = qx::dao::insert(authorX);
    // 插入一条记录
//    daoError = qx::dao::insert(author_1);

    // 删除一条记录
    daoError = qx::dao::delete_by_id(author_2);

    // 修改记录名称
    author_1.m_name = "jishufeng";
    daoError = qx::dao::save(author_1);

    // 通过id进行查询
    author author_4;
    author_4.m_id = "author_id_1";
    daoError = qx::dao::fetch_by_id(author_4);
    qDebug()<<"fetch name-->"<<author_4.m_name;

    // 通过sql语句进行查询
    qx_query _Sql("SELECT * FROM author");
    authorX.clear();
    qDebug()<<"count before-->"<<QString::number(authorX.count());
    daoError = qx::dao::execute_query(_Sql, authorX);
    qDebug()<<"count after-->"<<QString::number(authorX.count());
}

运行DatabaseHelper即可。


结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351