1015.利用QxOrm库操作数据库示例代码

QxOrm 示例代码

承接上一遍的QxOrm框架开发环境搭建,本篇幅梳理一下QxOrm示例,互联网资料并不多,主要还是在参考官方示例代码的基础上,写了本篇的示例小demo.

1 ORM介绍

对象关系映射(Object Relational Mapping,简称ORM) 是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG规范的对象数据库依然需要类级别的元数据。

2 定义产品类product

product.h 头文件如下

#pragma once

#include <QString>
#include <QxOrm_Impl.h>
#include "precompiled.h"

/**
 * 自定义一个产品类.add by xhome 2020/3/11
 * QX_PRODUCT_DLL_EXPORT 导出符号必须存在,因为我们自定义的类需要给dao层调用.
 */
class QX_PRODUCT_DLL_EXPORT product {
public:
	long  id;  //id
	QString name; //名称
	QString description; //描述

	product():id(0) { ; }

	virtual ~product() { ; }

};

QX_REGISTER_HPP_QX_PRODUCT(product, qx::trait::no_base_class_defined, 0)

typedef std::shared_ptr<product> product_ptr;
typedef std::vector<product_ptr> list_product;

product.cpp 文件如下

#include <QxOrm_Impl.h>
#include "product.h"
#include "precompiled.h"
//
//注册cpp 类
namespace qx {
	template <> void register_class(QxClass<product> & t)
	{
		//生成表结构schema, 创建表格时回调使用.
		t.id(&product::id, "id", 0);
		t.data(&product::name, "name", 0);
		t.data(&product::description, "desc", 0);
	}
}

3 预编译头文件与导出库

export.h 文件如下

#pragma once

#ifdef _BUILDING_QX_PRODUCT
#define QX_PRODUCT_DLL_EXPORT QX_DLL_EXPORT_HELPER
#else // _BUILDING_QX_BLOG
#define QX_PRODUCT_DLL_EXPORT QX_DLL_IMPORT_HELPER
#endif // _BUILDING_QX_BLOG


#ifdef _BUILDING_QX_PRODUCT
#define QX_REGISTER_HPP_QX_PRODUCT     QX_REGISTER_HPP_EXPORT_DLL
#define QX_REGISTER_CPP_QX_PRODUCT     QX_REGISTER_CPP_EXPORT_DLL
#else // _BUILDING_QX_PRODUCT
#define QX_REGISTER_HPP_QX_PRODUCT     QX_REGISTER_HPP_IMPORT_DLL
#define QX_REGISTER_CPP_QX_PRODUCT     QX_REGISTER_CPP_IMPORT_DLL
#endif // _BUILDING_QX_PRODUCT

precompiled.h 文件如下

#pragma once

#include "export.h"
#include <QxOrm.h>

4 主函数简单调用

main.cpp 文件如下

#include "testQxORM.h"
#include <QtWidgets/QApplication>
#include <QStringLiteral>

#include <QxOrm_Impl.h>
#include "product.h"

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	
	QFile::remove("./product.sqlite");
	
	// Parameters to connect to database
	qx::QxSqlDatabase::getSingleton()->setDriverName("QSQLITE");
	qx::QxSqlDatabase::getSingleton()->setDatabaseName("./product.sqlite");
	qx::QxSqlDatabase::getSingleton()->setHostName("localhost");
	qx::QxSqlDatabase::getSingleton()->setUserName("root");
	qx::QxSqlDatabase::getSingleton()->setPassword("");
	qx::QxSqlDatabase::getSingleton()->setFormatSqlQueryBeforeLogging(true);
	qx::QxSqlDatabase::getSingleton()->setDisplayTimerDetails(true);

	// Only for debug purpose : assert if invalid offset detected fetching a relation
	qx::QxSqlDatabase::getSingleton()->setVerifyOffsetRelation(true);

	//创建数据库表.
	QSqlError daoError = qx::dao::create_table<product>();

	product_ptr product_1;
	product_ptr product_2;

	//智能指针托管.将普通指针转换为智能指针,由系统进行维护管理.
	product_1.reset(new product());
	product_1->id = 1;
	product_1->name = QStringLiteral("苹果");
	product_1->description = QStringLiteral("熟透了的红苹果");

	product_2.reset(new product());
	product_2->id = 2;
	product_2->name = QStringLiteral("香蕉");
	product_2->description = QStringLiteral("很新鲜的香蕉");

	list_product productX;

	productX.push_back(product_1);
	productX.push_back(product_2);

	daoError = qx::dao::insert(productX);


	return 0;
}

5 运行效果图

运行程序生成数据库product.sqlite ,通过navcat 软件查看数据表如下效果.
在这里插入图片描述

6 项目配置上需要注意点

项目结构如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

好的,我来回答你的问题。 首先,你需要在Qt项目中添加QxOrm。可以通过以下步骤实现: 1. 从QxOrm官方网站下载最新版本的QxOrm,然后解压缩到你的项目目录中。 2. 在Qt的.pro文件中添加以下内容: ``` INCLUDEPATH += path/to/qxorm/include LIBS += -Lpath/to/qxorm/lib -lqxorm ``` 这样就可以在Qt项目中使用QxOrm了。 接下来,你需要将xml文件中的数据添加到数据库中。可以通过以下步骤实现: 1. 定义一个QxOrm类来表示xml文件中的数据。 2. 使用QxOrm的反序列化功能将xml文件中的数据转换为QxOrm类的对象。 3. 使用QxOrm的ORM功能将QxOrm类的对象存储到数据库中。 下面是一个示例代码: ``` #include <QxOrm/QxOrm.h> #include <QFile> #include "myxmlclass.h" int main() { // 初始化QxOrm qx::QxInitQxOrm(); // 读取xml文件 QFile xmlFile("data.xml"); if (!xmlFile.open(QIODevice::ReadOnly)) { qWarning() << "Failed to open XML file"; return -1; } // 反序列化xml文件 myxmlclass xmlData; qx::serialization::xml::from_file(xmlData, xmlFile); // 将数据存储到数据库中 qx::dao::ptr<myxmlclass> dao = qx::dao::create<myxmlclass>(); dao->insert(xmlData); // 关闭xml文件 xmlFile.close(); // 从数据库中查询数据 QList<myxmlclass_ptr> dataList; dao->fetch_all(dataList); // 修改数据 dataList[0]->setAttribute("name", "new name"); dao->update(dataList[0]); // 删除数据 dao->remove(dataList[0]); // 将数据导出为xml文件 QFile outputFile("output.xml"); if (!outputFile.open(QIODevice::WriteOnly)) { qWarning() << "Failed to open output file"; return -1; } qx::serialization::xml::to_file(dataList, outputFile); // 关闭输出文件 outputFile.close(); // 清理QxOrm资源 qx::QxUninitQxOrm(); return 0; } ``` 最后,你需要将数据库中的数据导出为xml文件。可以通过以下步骤实现: 1. 使用QxOrm的查询功能从数据库中查询数据。 2. 使用QxOrm的序列化功能将查询结果转换为xml文件格式。 3. 将xml文件写入到文件中。 下面是一个示例代码: ``` #include <QxOrm/QxOrm.h> #include <QFile> #include "myxmlclass.h" int main() { // 初始化QxOrm qx::QxInitQxOrm(); // 从数据库中查询数据 QList<myxmlclass_ptr> dataList; qx::dao::ptr<myxmlclass> dao = qx::dao::create<myxmlclass>(); dao->fetch_all(dataList); // 将数据导出为xml文件 QFile outputFile("output.xml"); if (!outputFile.open(QIODevice::WriteOnly)) { qWarning() << "Failed to open output file"; return -1; } qx::serialization::xml::to_file(dataList, outputFile); // 关闭输出文件 outputFile.close(); // 清理QxOrm资源 qx::QxUninitQxOrm(); return 0; } ``` 希望这个回答能够帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangshui516

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值