使用C++的ORM框架QxORM详解
QxORM中,我们用的最多的无非是这两点
官方表述是这样的:
【使用C++的ORM框架QxORM详解】持久性:支持最常见的数据库,如SQLite、MySQL、PostgreSQL、Oracle、MS SQL Server、MongoDB(具有 1-1、1-n、n-1 和 n-n 关系);
序列化:JSON、二进制和 XML 格式;
简洁一点就是:
连接访问各类主流数据库
能够将数据导入导出
下面我们进入主题:
第一步:建立对象模型。相对于常规的结构体,只是多了一些宏定义与声明。
头文件:QxModels.h
#include "precompiled.h"/**************************************************************** @projectNamepluqt* @brief自定义ORM模型* @authorlzw* @date2022-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"#includeQX_REGISTER_CPP_QX_DLL1(User)namespace qx{template <> void register_class(QxClass & 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(); // 产生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()< UserPtr; //typedef qx::QxCollection 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++ QxORM内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- vue3中的父子组件通讯详情
- Vue+java实现时间段的搜索示例
- Java中ThreadLocal线程变量的实现原理
- TaiShan|TaiShan 200服务器安装Ubuntu 18.04的图文教程
- Tomcat|Tomcat HTTPS证书申请与部署的实现
- 710. 黑名单中的随机数
- 程序员必备,一款让你提高工作效率N倍的神器uTools
- 一个快速切换一个底层实现的思路分享
- 分布式机器学习(同步并行SGD算法的实现与复杂度分析(PySpark))
- C#中的|C#中的 Attribute 与 Python/TypeScript 中的装饰器是同个东西吗