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

 更新时间:2022年06月26日 11:31:27   作者:Kevinsh.Lee  
这篇文章主要介绍了使用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);

有图有真相。执行前:

执行后:(并不需要写一条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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解如何使用VSCode和CMake构建跨平台的C/C++开发环境

    详解如何使用VSCode和CMake构建跨平台的C/C++开发环境

    本文主要介绍了如何使用VSCode和CMake构建跨平台的C/C++开发环境,想进行跨平台开发的同学们,一定要看一下
    2021-06-06
  • C++中的类扩展之继承和组合详解

    C++中的类扩展之继承和组合详解

    在C++中,类扩展可以通过继承、组合和装饰模式实现。继承可以实现对已有类的修改和扩展,组合可以增加新的功能,装饰模式则能够在不改变原类的情况下为其添加新的功能。这些技术在C++程序设计中应用广泛,提高了程序的可扩展性和可维护性
    2023-04-04
  • C++实现STL容器的示例

    C++实现STL容器的示例

    本文主要介绍了C++实现STL容器的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • C语言随机数生成教程(rand和srand用法)

    C语言随机数生成教程(rand和srand用法)

    这篇文章主要介绍了C语言随机数生成教程(rand和srand用法),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C语言详细讲解通过递归实现扫雷的展开

    C语言详细讲解通过递归实现扫雷的展开

    windows自带的游戏《扫雷》是陪伴了无数人的经典游戏,本文将利用C语言实现这一经典的游戏,文中的示例代码讲解详细,感兴趣的可以学习一下
    2022-05-05
  • Cocos2d-x学习入门之HelloWorld程序

    Cocos2d-x学习入门之HelloWorld程序

    这篇文章主要介绍了Cocos2d-x学习入门之HelloWorld程序,是学习Cocos2d-x的入门程序,其重要性不言而喻,需要的朋友可以参考下
    2014-08-08
  • C++实现LeetCode(199.二叉树的右侧视图)

    C++实现LeetCode(199.二叉树的右侧视图)

    这篇文章主要介绍了C++实现LeetCode(199.二叉树的右侧视图),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C语言 makefile学习及实现实例

    C语言 makefile学习及实现实例

    这篇文章主要介绍了C语言 makefile学习及实现实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • C++将字符串格式化的几种方式总结

    C++将字符串格式化的几种方式总结

    这篇文章主要介绍了C++将字符串格式化的几种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • C语言课程设计之停车场管理问题

    C语言课程设计之停车场管理问题

    这篇文章主要为大家详细介绍了C语言课程设计之停车场管理问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论