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需要增加的内容:
- sql
QT += sql
- 宏定义(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
- 预编译文件
!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();
}