您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何使用C++的ORM框架QxORM”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何使用C++的ORM框架QxORM”吧!
QxORM中,我們用的最多的無非是這兩點
官方表述是這樣的:
持久性:支持最常見的數(shù)據(jù)庫,如SQLite、MySQL、PostgreSQL、Oracle、MS SQL Server、MongoDB(具有 1-1、1-n、n-1 和 n-n 關(guān)系);
序列化:JSON、二進制和 XML 格式;
簡潔一點就是:
連接訪問各類主流數(shù)據(jù)庫
能夠?qū)?shù)據(jù)導(dǎo)入導(dǎo)出
下面我們進入主題:
第一步:建立對象模型。相對于常規(guī)的結(jié)構(gòu)體,只是多了一些宏定義與聲明。
頭文件: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) { // 設(shè)置表名 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。建表,新增,簡單查詢,復(fù)雜查詢等等
// 建表 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ù)
// 導(dǎo)出binary流 qx::serialization::qt::to_file(in_pointUser, "user.txt"); // 導(dǎo)出json文本 qx::serialization::json::to_file(in_userList, "list_of_user.json");
感謝各位的閱讀,以上就是“如何使用C++的ORM框架QxORM”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對如何使用C++的ORM框架QxORM這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。