QxOrm笔记(二)

ORM就是对象关系映射(英语:Object Relational Mapping)的简称。 
顾名思义,所以建立就是对象和表的对应关系。然后通过修改对象来修改数据库的表。

对象的建立

假设我们有一个表t_table:

id value created_date modified_date

我们需要建立一个对应的类TableObject 
使用QxOrm的话,代码如下:

#include <QxOrm.h>
class TableObject
{
    QX_REGISTER_FRIEND_CLASS(TableObject)
protected:
    QString m_id;
    QDateTime m_value;
    QDateTime m_createdDate;
    QDateTime m_modifiedDate;

public:

    TableObject();
    virtual ~TableObject();

    QString Getid() const;
    QString GetValue() const;
    QDateTime GetCreatedDate() const;
    QDateTime GetModifiedDate() const;

    void SetId(const QString & val);
    void SetValue(const QString &val);
    void SetCreatedDate(const QDateTime & val);
    void SetModifiedDate(const QDateTime & val);
};
QX_REGISTER_PRIMARY_KEY(SpBaseORM, QString)
QX_REGISTER_HPP_EXPORT_DLL(SpBaseORM, qx::trait::no_base_class_defined, 0)
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 首先,必须引用QxOrm.h
  • 然后,给每个字段对应定义一个属性(成员变量+Get,Set函数) 
    如果t_table的主键(id)不是整数类型的,那就需要使用QX_REGISTER_PRIMARY_KEY来定义主键的类型。 
    在这里我用的字符串类型(QString),所以需要QX_REGISTER_PRIMARY_KEY(SpBaseORM, QString)

  • QX_REGISTER_HPP_EXPORT_DLL是用来做dll导出类的,正常情况下也需要自己每个工程定义宏的导入或者导出,例如:

#if defined(LIBRARY)
#  define QX_REGISTER_HPP_LIBRARY QX_REGISTER_HPP_EXPORT_DLL
#  define QX_REGISTER_CPP_LIBRARY QX_REGISTER_CPP_EXPORT_DLL
#else
#  define QX_REGISTER_HPP_LIBRARY QX_REGISTER_HPP_IMPORT_DLL
#  define QX_REGISTER_CPP_LIBRARY QX_REGISTER_CPP_IMPORT_DLL
#endif
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后是cpp文件:

#include <QxMemLeak.h>

QX_REGISTER_CPP_DATABASEMODELS(SpBaseORM)

namespace qx {

template <>
void register_class(QxClass<SpBaseORM> & t)
{
   qx::IxDataMember * pData = NULL; Q_UNUSED(pData);
   qx::IxSqlRelation * pRelation = NULL; Q_UNUSED(pRelation);
   qx::IxFunction * pFct = NULL; Q_UNUSED(pFct);
   qx::IxValidator * pValidator = NULL; Q_UNUSED(pValidator);

   t.setName("t_table");

   pData = t.id(& SpBaseORM::m_id, "id", 0);
   pData = t.data(& SpBaseORM::m_value, "value", 0, true, true);
   pData = t.data(& SpBaseORM::m_createdDate, "createdDate", 0, true, true);
   pData->setName("created_date");
   pData = t.data(& SpBaseORM::m_modifiedDate, "modifiedDate", 0, true, true);
   pData->setName("modified_date");

   qx::QxValidatorX<SpBaseORM> * pAllValidator = t.getAllValidator(); Q_UNUSED(pAllValidator);
}

} // namespace qx

SpBaseORM::SpBaseORM() { ; }
SpBaseORM::~SpBaseORM() { ; }

QString SpBaseORM::GetId() const { return m_id; }
QString SpBaseORM::GetValue() const { return m_value; }
QDateTime SpBaseORM::GetCreatedDate() const { return m_createdDate; }
QDateTime SpBaseORM::GetModifiedDate() const { return m_modifiedDate; }

void SpBaseORM::SetId(const QString & val) { m_id = val; }
void SpBaseORM::SetValue(const QString & val) { m_value = val; }
void SpBaseORM::SetCreatedDate(const QDateTime & val) { m_createdDate = val; }
void SpBaseORM::SetModifiedDate(const QDateTime & val) { m_modifiedDate = val; }

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • cpp文件必须引用QxMemLeak.h
  • 设定对应的表名t.setName("t_table");
  • 设定主键的对应关系pData = t.id(& SpBaseORM::m_id, "id", 0);
  • 设定属性和字段的对应关系
   pData = t.data(& SpBaseORM::m_value, "value", 0, true, true);
   pData = t.data(& SpBaseORM::m_createdDate, "createdDate", 0, true, true);
   pData->setName("created_date");
   pData = t.data(& SpBaseORM::m_modifiedDate, "modifiedDate", 0, true, true);
   pData->setName("modified_date");
 
 
  • 1
  • 2
  • 3
  • 4
  • 5

此时,可以认为一个table的映射对象就建立好了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值