这篇文章主要讲解了“如何使用C++的ORM框架QxORM”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用C++的ORM框架QxORM”吧!
QxORM中,我们用的最多的无非是这两点
官方表述是这样的:
持久性:支持最常见的数据库,如SQLite、MySQL、PostgreSQL、Oracle、MS SQL Server、MongoDB(具有 1-1、1-n、n-1 和 n-n 关系);
序列化:JSON、二进制和 XML 格式;
简洁一点就是:
连接访问各类主流数据库
能够将数据导入导出
下面我们进入主题:
第一步:建立对象模型。相对于常规的结构体,只是多了一些宏定义与声明。
头文件:QxModels.h
#include "precompiled.h"
/***************************************************************
* @projectName pluqt
* @brief 自定义ORM模型
* @author lzw
* @date 2022-01-04
***************************************************************/
struct User
{
long id;
QString name;
int age;
QString hobbies;
};
QX_REGISTER_HPP_QX_DLL1(User, qx::trait::no_base_class_defined, 1)
源文件:QxModels.cpp
#include "precompiled.h"
#include "qxmodels.h"
#include <QxOrm_Impl.h>
QX_REGISTER_CPP_QX_DLL1(User)
namespace qx
{
template <> void register_class(QxClass<User> & t)
{
// 设置表名
t.setName("User");
// 注册 User::id <=> 数据库中的主键
t.id(&User::id, "id");
// 注册 User::name 属性,使用的 key 是 name,version 是 1。
t.data(&User::name, "name", 1);
// 注册 User::age 属性,使用的 key 是 age。
t.data(&User::age, "age");
// 注册 User::hobbies 属性,使用的 key 是 hobbies。
t.data(&User::hobbies, "hobbies");
}
}
第二步:连接数据库。
QString in_db = QCoreApplication::applicationDirPath();
in_db.append("/database/plulocal.db");
QFile::remove(in_db);
qx::QxSqlDatabase::getSingleton()->setDriverName("QSQLITE");
qx::QxSqlDatabase::getSingleton()->setDatabaseName(in_db);
qx::QxSqlDatabase::getSingleton()->setHostName("localhost");
qx::QxSqlDatabase::getSingleton()->setUserName("root");
qx::QxSqlDatabase::getSingleton()->setPassword("");
qx::QxSqlDatabase::getSingleton()->setSqlPlaceHolderStyle(qx::QxSqlDatabase::ph_style_2_point_name);
qx::QxSqlDatabase::getSingleton()->setTraceSqlQuery(true);
qx::QxSqlDatabase::getSingleton()->setTraceSqlRecord(false);
第三步:使用ORM。建表,新增,简单查询,复杂查询等等
// 建表
QSqlError daoError1 = qx::dao::create_table<User>();
// 产生100条模拟数据
for(int in_idx=0; in_idx<100; ++in_idx)
{
auto in_user = new User();
in_user->name = "lzw"+QString::number(in_idx);
in_user->age = 20+in_idx;
in_user->hobbies = "play";
auto daoError1 = qx::dao::insert(in_user);
}
// 查询单条记录
User in_pointUser; in_pointUser.id = 3;
qDebug()<<in_pointUser.name;
QSqlError daoError11 = qx::dao::fetch_by_id(in_pointUser);
qDebug()<<in_pointUser.name;
// 查询一定年龄段的集合记录
//typedef std::shared_ptr<User> UserPtr;
//typedef qx::QxCollection<long, UserPtr> UserList;
UserList in_userList;
qx_query in_query("select * from user where age>=20 and age<=25");
daoError11 = qx::dao::execute_query(in_query, in_userList);
qAssert(! daoError11.isValid()); qAssert(in_userList.count() > 0);
qx::dump(in_userList);
有图有真相。执行前:
执行后:(并不需要写一条sql语句,当然也支持写原生sql语句)
补充:序列化的两个函数
// 导出binary流
qx::serialization::qt::to_file(in_pointUser, "user.txt");
// 导出json文本
qx::serialization::json::to_file(in_userList, "list_of_user.json");
感谢各位的阅读,以上就是“如何使用C++的ORM框架QxORM”的内容了,经过本文的学习后,相信大家对如何使用C++的ORM框架QxORM这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。