qxorm mysql,QxOrm 访问 MySQL
时间: 2023-08-04 07:06:36 浏览: 42
QxOrm 是一个 C++ ORM(对象关系映射)框架,它提供了访问数据库的功能。其中,QxOrm 支持多种数据库,包括 MySQL。
要使用 QxOrm 访问 MySQL,你需要在编译 QxOrm 时启用 MySQL 支持。具体来说,你需要在 CMake 构建 QxOrm 时设置 `-DQX_ORM_ENABLE_MYSQL=ON`。在启用了 MySQL 支持后,你就可以在你的代码中使用 QxOrm 的 MySQL 驱动程序来访问 MySQL 数据库了。
下面是一个简单的示例代码,展示了如何使用 QxOrm 访问 MySQL 数据库:
```cpp
#include <QxOrm.h>
#include <QxDao/QxSqlDatabase.h>
#include <QxDao/QxSqlQueryBuilder.h>
class MyObject
{
public:
long m_id;
std::string m_name;
int m_value;
QX_REGISTER_FRIEND_CLASS(MyObject)
private:
// QxOrm 必须要有一个反射函数
static void register_class(QxClass<MyObject>& t)
{
t.id(&MyObject::m_id, "id");
t.data(&MyObject::m_name, "name");
t.data(&MyObject::m_value, "value");
}
};
QX_REGISTER_CPP_QX_DLL2(MyObject, QxOrm::serialization::xml)
int main()
{
// 连接到 MySQL 数据库
QxOrm::QxSqlDatabase database;
database.setDriverName("QMYSQL");
database.setHostName("localhost");
database.setDatabaseName("my_database");
database.setUserName("my_username");
database.setPassword("my_password");
if (!database.open())
{
std::cerr << "Failed to open database: " << database.lastError().text().toStdString() << std::endl;
return 1;
}
// 创建 QxOrm session
QxOrm::QxSession session(database.driverName().toStdString());
// 创建表格
if (!session.createTable<MyObject>())
{
std::cerr << "Failed to create table: " << session.lastError().text() << std::endl;
return 1;
}
// 插入数据
MyObject obj;
obj.m_name = "foo";
obj.m_value = 42;
if (!session.insert(obj))
{
std::cerr << "Failed to insert object: " << session.lastError().text() << std::endl;
return 1;
}
// 查询数据
std::vector<MyObject> objects;
if (!session.getAll(objects))
{
std::cerr << "Failed to get objects: " << session.lastError().text() << std::endl;
return 1;
}
for (const auto& obj : objects)
{
std::cout << "id=" << obj.m_id << ", name=" << obj.m_name << ", value=" << obj.m_value << std::endl;
}
return 0;
}
```
注意,上面的代码中使用了 QxOrm 的反射机制,需要在 MyObject 类中定义一个静态函数 `register_class`,该函数用于注册类的属性和成员变量。另外,还需要在 MyObject 类外部使用 `QX_REGISTER_CPP_QX_DLL2` 宏来注册该类,以便 QxOrm 可以正确地序列化和反序列化该类的对象。