中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用C++的ORM框架QxORM

發布時間:2022-07-07 10:18:12 來源:億速云 閱讀:420 作者:iii 欄目:開發技術

這篇文章主要講解了“如何使用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);

有圖有真相。執行前:

如何使用C++的ORM框架QxORM

執行后:(并不需要寫一條sql語句,當然也支持寫原生sql語句)

如何使用C++的ORM框架QxORM

補充:序列化的兩個函數

// 導出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這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

离岛区| 鹤庆县| 满城县| 乌兰县| 化德县| 阳城县| 呼玛县| 莲花县| 吕梁市| 平阳县| 新绛县| 昆明市| 南投县| 山西省| 庆阳市| 古丈县| 武川县| 绥阳县| 遂川县| 延川县| 金门县| 天峻县| 巨野县| 体育| 寿宁县| 廉江市| 荥经县| 奎屯市| 吉首市| 梁平县| 镇巴县| 民丰县| 额济纳旗| 沂南县| 张家口市| 竹溪县| 玉环县| 嵊泗县| 榆中县| 昌图县| 长沙县|