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
然后是cpp文件:
#include <QxMemLeak.h>
QX_REGISTER_CPP_DATABASEMODELS(SpBaseORM)
namespace qx {
template <>
void register_class(QxClass<SpBaseORM> & t)
{
qx::IxDataMember * pData = NULL
qx::IxSqlRelation * pRelation = NULL
qx::IxFunction * pFct = NULL
qx::IxValidator * pValidator = NULL
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()
}
} // 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");
此时,可以认为一个table的映射对象就建立好了。