qxorm,开始

来源:互联网 发布:吉林市退休工资算法 编辑:程序博客网 时间:2024/06/15 19:25

在成功配置好qxorm,并应用其自带的代码测试过后,就可以参照其官方文档来编写自己的程序了


qxblog.pro

include(../../QxOrm.pri)TEMPLATE = appDEFINES += _BUILDING_QX_BLOGINCLUDEPATH += ../../../QxOrm/include/DESTDIR = ../../../QxOrm/test/_bin/LIBS += -L"../../../QxOrm/test/_bin"!contains(DEFINES, _QX_NO_PRECOMPILED_HEADER) {PRECOMPILED_HEADER = ./include/precompiled.h} # !contains(DEFINES, _QX_NO_PRECOMPILED_HEADER)macx:CONFIG-=app_bundleCONFIG(debug, debug|release) {TARGET = qxBlogdLIBS += -l"QxOrmd"} else {TARGET = qxBlogLIBS += -l"QxOrm"} # CONFIG(debug, debug|release)HEADERS += ./include/precompiled.hHEADERS += ./include/export.hHEADERS += ./include/author.hHEADERS += ./include/blog.hHEADERS += ./include/category.hHEADERS += ./include/comment.hSOURCES += ./src/author.cppSOURCES += ./src/blog.cppSOURCES += ./src/category.cppSOURCES += ./src/comment.cppSOURCES += ./src/main.cpp

其中几项重要的:

0、当然要include QxOrm.pri,其中包含了各种需要文件的路径

1、qxormd,应用于debug,那么明显的,qxorm应用于release。这两个lib是在编译好qxorm之后产生的,libs要添加这两个.lib

2、precompiled_header : precompiled.h中包含两个头文件, 这两个头文件很重要。其中qxorm.h中包含了所有其他qxorm中的头文件,所以预编译显得重要的原因在于时间,以及其中包含的文件中的各种声明等等,这样一来,我们就不需要在之后自己定义的头文件中一个个的包含qxorm.h

3、export.h,其中定义了一些宏,这些宏我也没有搞清楚到底是用来干嘛的,但是在官网中说,这个头文件是必须的,每个用到qxorm的项目都要包含这个头文件。还要注意.pro文件中的building qxblog行。


头文件的写法:

#ifndef _QX_BLOG_AUTHOR_H_#define _QX_BLOG_AUTHOR_H_class blog;class QX_BLOG_DLL_EXPORT author{public:// -- typedef   typedef qx_shared_ptr<blog> blog_ptr;   typedef std::vector<blog_ptr> list_blog;// -- enum   enum enum_sex { male, female, unknown };// -- properties   QString     m_id;   QString     m_name;   QDate       m_birthdate;   enum_sex    m_sex;   list_blog   m_blogX;// -- 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_QX_BLOG(author, qx::trait::no_base_class_defined, 0)typedef qx_shared_ptr<author> author_ptr;typedef qx::QxCollection<QString, author_ptr> list_author;#endif // _QX_BLOG_AUTHOR_H_


QX_REGISTER_PRIMARY_KEY()

这一行是用来修改主键的类型,本来默认的主键类型是long类型。官网中说,修改主键类型一定要在register hpp这一行的上面,不然编译会报错……

cpp的写法:

#include "../include/precompiled.h"#include "../include/author.h"#include "../include/blog.h"#include <QxMemLeak.h>QX_REGISTER_CPP_QX_BLOG(author)namespace qx {template <> void register_class(QxClass<author> & t){   t.id(& author::m_id, "author_id");//主键   t.data(& author::m_name, "name");//以m_name变量为数据,以name为头创建列   t.data(& author::m_birthdate, "birthdate");   t.data(& author::m_sex, "sex");   t.relationOneToMany(& author::m_blogX, "list_blog", "author_id");
//一对多关系,一个作者对应多个博客,blog存放在m_blog成员变量中,关联字段为author_id   t.fct_0<int>(& author::age, "age");}}int author::age() const{   if (! m_birthdate.isValid()) { return -1; }   return (QDate::currentDate().year() - m_birthdate.year());}


对于main函数的写法,其中对于数据库的操作,可以参照代码中的样子


学习QXORM的时间成本还是可以的,自带的方法以及类的写法参照官方文档熟悉起来很快,其自带的方法也很好懂。

对于sqlite的支持也很智能,基本上不用我们再动手去写sql命令。

只是这个框架并不支持除sqlite以外的数据库,虽然官网上说的是支持各种数据库,但是当你成功配置,开始写自己的项目的时候就会发现,一旦你使用除sqlite之外其他的数据库,他会提醒你若要支持其他数据库需要下载插件(收费,300欧每年)或者自己写逻辑或者下载各数据库自带的操作框架,十分坑爹。 

0 0
原创粉丝点击