最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C++的ORM框架QxORM詳解

 更新時(shí)間:2022年06月26日 11:31:27   作者:Kevinsh.Lee  
這篇文章主要介紹了使用C++的ORM框架QxORM的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

QxORM中,我們用的最多的無非是這兩點(diǎn)

官方表述是這樣的:

持久性:支持最常見的數(shù)據(jù)庫(kù),如SQLite、MySQL、PostgreSQL、Oracle、MS SQL Server、MongoDB(具有 1-1、1-n、n-1 和 n-n 關(guān)系);
序列化:JSON、二進(jìn)制和 XML 格式;

簡(jiǎn)潔一點(diǎn)就是:

連接訪問各類主流數(shù)據(jù)庫(kù)

能夠?qū)?shù)據(jù)導(dǎo)入導(dǎo)出

下面我們進(jìn)入主題:

第一步:建立對(duì)象模型。相對(duì)于常規(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");
        // 注冊(cè) User::id <=> 數(shù)據(jù)庫(kù)中的主鍵
        t.id(&User::id, "id");
        // 注冊(cè) User::name 屬性,使用的 key 是 name,version 是 1。
        t.data(&User::name, "name", 1);
        // 注冊(cè) User::age 屬性,使用的 key 是 age。
        t.data(&User::age, "age");
        // 注冊(cè) User::hobbies 屬性,使用的 key 是 hobbies。
        t.data(&User::hobbies, "hobbies");
    }
}

第二步:連接數(shù)據(jù)庫(kù)。

 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。建表,新增,簡(jiǎn)單查詢,復(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語(yǔ)句,當(dāng)然也支持寫原生sql語(yǔ)句)

補(bǔ)充:序列化的兩個(gè)函數(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");

一氣呵成,大功告成。各位很簡(jiǎn)單吧

到此這篇關(guān)于使用C++的ORM框架QxORM的文章就介紹到這了,更多相關(guān)C++ QxORM內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何使用VSCode和CMake構(gòu)建跨平臺(tái)的C/C++開發(fā)環(huán)境

    詳解如何使用VSCode和CMake構(gòu)建跨平臺(tái)的C/C++開發(fā)環(huán)境

    本文主要介紹了如何使用VSCode和CMake構(gòu)建跨平臺(tái)的C/C++開發(fā)環(huán)境,想進(jìn)行跨平臺(tái)開發(fā)的同學(xué)們,一定要看一下
    2021-06-06
  • C++中的類擴(kuò)展之繼承和組合詳解

    C++中的類擴(kuò)展之繼承和組合詳解

    在C++中,類擴(kuò)展可以通過繼承、組合和裝飾模式實(shí)現(xiàn)。繼承可以實(shí)現(xiàn)對(duì)已有類的修改和擴(kuò)展,組合可以增加新的功能,裝飾模式則能夠在不改變?cè)惖那闆r下為其添加新的功能。這些技術(shù)在C++程序設(shè)計(jì)中應(yīng)用廣泛,提高了程序的可擴(kuò)展性和可維護(hù)性
    2023-04-04
  • C++實(shí)現(xiàn)STL容器的示例

    C++實(shí)現(xiàn)STL容器的示例

    本文主要介紹了C++實(shí)現(xiàn)STL容器的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C語(yǔ)言隨機(jī)數(shù)生成教程(rand和srand用法)

    C語(yǔ)言隨機(jī)數(shù)生成教程(rand和srand用法)

    這篇文章主要介紹了C語(yǔ)言隨機(jī)數(shù)生成教程(rand和srand用法),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C語(yǔ)言詳細(xì)講解通過遞歸實(shí)現(xiàn)掃雷的展開

    C語(yǔ)言詳細(xì)講解通過遞歸實(shí)現(xiàn)掃雷的展開

    windows自帶的游戲《掃雷》是陪伴了無數(shù)人的經(jīng)典游戲,本文將利用C語(yǔ)言實(shí)現(xiàn)這一經(jīng)典的游戲,文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Cocos2d-x學(xué)習(xí)入門之HelloWorld程序

    Cocos2d-x學(xué)習(xí)入門之HelloWorld程序

    這篇文章主要介紹了Cocos2d-x學(xué)習(xí)入門之HelloWorld程序,是學(xué)習(xí)Cocos2d-x的入門程序,其重要性不言而喻,需要的朋友可以參考下
    2014-08-08
  • C++實(shí)現(xiàn)LeetCode(199.二叉樹的右側(cè)視圖)

    C++實(shí)現(xiàn)LeetCode(199.二叉樹的右側(cè)視圖)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(199.二叉樹的右側(cè)視圖),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語(yǔ)言 makefile學(xué)習(xí)及實(shí)現(xiàn)實(shí)例

    C語(yǔ)言 makefile學(xué)習(xí)及實(shí)現(xiàn)實(shí)例

    這篇文章主要介紹了C語(yǔ)言 makefile學(xué)習(xí)及實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C++將字符串格式化的幾種方式總結(jié)

    C++將字符串格式化的幾種方式總結(jié)

    這篇文章主要介紹了C++將字符串格式化的幾種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C語(yǔ)言課程設(shè)計(jì)之停車場(chǎng)管理問題

    C語(yǔ)言課程設(shè)計(jì)之停車場(chǎng)管理問題

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言課程設(shè)計(jì)之停車場(chǎng)管理問題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論

天柱县| 吉林省| 高唐县| 东平县| 青海省| 万安县| 大石桥市| 天柱县| 泸溪县| 大关县| 麻栗坡县| 洮南市| 昆山市| 油尖旺区| 宿松县| 上思县| 北安市| 秦皇岛市| 石屏县| 尼木县| 福贡县| 喀喇沁旗| 永年县| 包头市| 冀州市| 凤阳县| 乌拉特后旗| 兴隆县| 武定县| 奈曼旗| 临泉县| 宜丰县| 左权县| 砀山县| 辰溪县| 长顺县| 沙雅县| 郑州市| 凤山县| 牟定县| 垫江县|