網(wǎng)站首頁 編程語言 正文
QxORM中,我們用的最多的無非是這兩點
官方表述是這樣的:
持久性:支持最常見的數(shù)據(jù)庫,如SQLite、MySQL、PostgreSQL、Oracle、MS SQL Server、MongoDB(具有 1-1、1-n、n-1 和 n-n 關系);
序列化:JSON、二進制和 XML 格式;
簡潔一點就是:
連接訪問各類主流數(shù)據(jù)庫
能夠將數(shù)據(jù)導入導出
下面我們進入主題:
第一步:建立對象模型。相對于常規(guī)的結構體,只是多了一些宏定義與聲明。
頭文件: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 <=> 數(shù)據(jù)庫中的主鍵
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");
}
}
第二步:連接數(shù)據(jù)庫。
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>();
// 產(chǎn)生100條模擬數(shù)據(jù)
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);
有圖有真相。執(zhí)行前:
執(zhí)行后:(并不需要寫一條sql語句,當然也支持寫原生sql語句)
補充:序列化的兩個函數(shù)
// 導出binary流 qx::serialization::qt::to_file(in_pointUser, "user.txt"); // 導出json文本 qx::serialization::json::to_file(in_userList, "list_of_user.json");
一氣呵成,大功告成。各位很簡單吧
原文鏈接:https://www.cnblogs.com/Kevinsh-Lee/p/16412968.html
相關推薦
- 2022-05-02 構建及部署jenkins?pipeline實現(xiàn)持續(xù)集成持續(xù)交付腳本_服務器其它
- 2022-04-12 網(wǎng)絡編程——Http請求方式Get與Post
- 2022-06-21 C++分析講解類的靜態(tài)成員函數(shù)如何使用_C 語言
- 2022-07-12 mac端口號被占用解決辦法
- 2022-03-20 詳解C語言對字符串處理函數(shù)的實現(xiàn)方法_C 語言
- 2022-09-07 python?正則表達式如何實現(xiàn)重疊匹配_python
- 2022-12-07 React?Refs?的使用forwardRef?源碼示例解析_React
- 2022-07-30 react擴展6_renderProps
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支