QxOrm 例一

22 篇文章 2 订阅
3 篇文章 0 订阅

1、 demo目录结构

include 、inl、 lib三个目录是从qxorm的目录拷贝过来的
目录要这样放,方便添加库
在这里插入图片描述
工程:
在这里插入图片描述

2、precompiled.h 文件

拷贝的一个test目录下的一 例子,这个文件必须要

#ifndef _QX_BLOG_PRECOMPILED_HEADER_H_
#define _QX_BLOG_PRECOMPILED_HEADER_H_

#include <QxOrm.h>

#include "export.h"

/*
// To resolve a problem with MSVC++ 2010 and MSVC++ 2012 (and later ?) :
// These compilers provide a tuple header but BOOST_NO_CXX11_HDR_TUPLE macro is defined !
// This is because these compilers doesn't provide variadic templates
#if (defined(_QX_CPP_11_TUPLE) && !defined(BOOST_NO_CXX11_HDR_TUPLE))
#define QX_TUPLE std::tuple
#define QX_TUPLE_GET std::get
#else // (defined(_QX_CPP_11_TUPLE) && !defined(BOOST_NO_CXX11_HDR_TUPLE))
#define QX_TUPLE boost::tuple
#define QX_TUPLE_GET boost::tuples::get
#endif // (defined(_QX_CPP_11_TUPLE) && !defined(BOOST_NO_CXX11_HDR_TUPLE))
*/

#define QX_TUPLE std::tuple
#define QX_TUPLE_GET std::get

#endif // _QX_BLOG_PRECOMPILED_HEADER_H_

3、export.h 文件

同样是参考test目录下的例子

#ifndef _QX_AMWHA_EXPORT_H_
#define _QX_AMWHA_EXPORT_H_

#ifdef _BUILDING_QX_AMWHA
#define QX_AMWHA_DLL_EXPORT QX_DLL_EXPORT_HELPER
#else // _BUILDING_QX_AMWHA
#define QX_AMWHA_DLL_EXPORT QX_DLL_IMPORT_HELPER
#endif // _BUILDING_QX_AMWHA

#ifdef _BUILDING_QX_AMWHA
#define QX_REGISTER_HPP_QX_AMWHA     QX_REGISTER_HPP_EXPORT_DLL
#define QX_REGISTER_CPP_QX_AMWHA     QX_REGISTER_CPP_EXPORT_DLL
#else // _BUILDING_QX_AMWHA
#define QX_REGISTER_HPP_QX_AMWHA     QX_REGISTER_HPP_IMPORT_DLL
#define QX_REGISTER_CPP_QX_AMWHA     QX_REGISTER_CPP_IMPORT_DLL
#endif // _BUILDING_QX_AMWHA

#endif // _QX_AMWHA_EXPORT_H_

4、 数据库表结构对象

#ifndef _QX_PERSON_H_
#define _QX_PERSON_H_

class QX_AMWHA_DLL_EXPORT Person
{

   QX_REGISTER_FRIEND_CLASS(author)

public:


   enum enum_sex { male, female, unknown };

   long                 m_id;
   QString              m_name;
   int                  m_age;
   enum_sex             m_sex;

   Person();
   virtual ~Person();


};

QX_REGISTER_HPP_QX_AMWHA(Person, qx::trait::no_base_class_defined, 0)

typedef std::shared_ptr<Person> person_ptr;
typedef std::vector<person_ptr> type_lst_person;

#endif

#include "precompiled.h"

#include "person.h"


#include <QxOrm_Impl.h>

QX_REGISTER_CPP_QX_AMWHA(Person)

namespace qx {
template <> void register_class(QxClass<Person> & t)
{
        t.id(   & Person::m_id,     "id");
        t.data(& Person::m_name,    "name");
        t.data(& Person::m_age,     "age");
        t.data(& Person::m_sex,     "sex");
}}

Person::Person()
{
    m_sex = unknown;
}

Person::~Person() { ; }


5、pro文件

pro需要增加的内容:

  1. sql
QT += sql
  1. 宏定义(precompiled.h文件内)
DEFINES += _BUILDING_QX_AMWHA
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../lib/ -lQxOrm
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../lib/ -lQxOrmd

INCLUDEPATH += $$PWD/../include
DEPENDPATH += $$PWD/../include
  1. 预编译文件
!contains(DEFINES, _QX_NO_PRECOMPILED_HEADER) {
    PRECOMPILED_HEADER = precompiled.h
}

以下是完整的pro文件:

QT -= gui
QT += sql
CONFIG += c++11 console
CONFIG -= app_bundle

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS


DEFINES += _BUILDING_QX_AMWHA


!contains(DEFINES, _QX_NO_PRECOMPILED_HEADER) {
    PRECOMPILED_HEADER = precompiled.h
}

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp \
        person.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../lib/ -lQxOrm
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../lib/ -lQxOrmd

INCLUDEPATH += $$PWD/../include
DEPENDPATH += $$PWD/../include

HEADERS += \
    export.h \
    person.h \
    precompiled.h

6、 应用

#include <QCoreApplication>

#include "precompiled.h"
#include "person.h"
#include <QxOrm_Impl.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // Init parameters to communicate with a database
    qx::QxSqlDatabase::getSingleton()->setDriverName("QSQLITE");
    qx::QxSqlDatabase::getSingleton()->setDatabaseName("./test_qxorm.db");
    qx::QxSqlDatabase::getSingleton()->setHostName("localhost");
    qx::QxSqlDatabase::getSingleton()->setUserName("root");
    qx::QxSqlDatabase::getSingleton()->setPassword("");

    //建表
    QSqlError daoError = qx::dao::create_table<Person>();

    person_ptr p1; p1.reset(new Person());p1->m_name = "Joey";p1->m_age = 35;p1->m_sex = Person::male;
    person_ptr p2; p2.reset(new Person());p2->m_name = "James";p2->m_age = 8;p2->m_sex = Person::male;
    person_ptr p3; p3.reset(new Person());p3->m_name = "Alla";p3->m_age = 36;p3->m_sex = Person::female;

    //增
    type_lst_person lst ;
    lst.push_back(p1);
    lst.push_back(p2);
    lst.push_back(p3);
    daoError = qx::dao::insert(lst);

    //改
    p2->m_name = "James modified";
    daoError = qx::dao::update(p2);

    //删
    // Delete the first person from database
    daoError = qx::dao::delete_by_id(p1);

    //查
    long count = qx::dao::count<Person>();
    qDebug()<<"count"<<count;

    // 查
    person_ptr d_tmp; d_tmp.reset(new Person());
    d_tmp->m_id =3;
    daoError = qx::dao::fetch_by_id(d_tmp);
    qDebug()<<"id:"<<d_tmp->m_id<<"name:"<<d_tmp->m_name;

    //查
    type_lst_person list;
    qx::dao::fetch_all(list);

    for(person_ptr p: list)
        qDebug()<<p->m_name<<endl;

    return a.exec();
}


在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值