首页 > 其他分享 >QxOrm环境搭建以及接口编写

QxOrm环境搭建以及接口编写

时间:2024-08-14 09:51:41浏览次数:14  
标签:QxOrm qx QSqlError dao 接口 daoError bool User 搭建

1. 常用ORM库比较

在这里插入图片描述

2. QxOrm库编译集成

2.1. 下载地址

https://www.qxorm.com/qxorm_en/home.html

2.2. 编译

2.2.1. 源码下载

在这里插入图片描述

2.2.2. cmake编译

在这里插入图片描述

2.2.3. 打开QxOrm工程编译Visual Studio 2015 (v140)版本库

在这里插入图片描述

2.2.4. 编译好的库生成目录

在这里插入图片描述

3. 注册

3.1. 注册类

其中传入的模板-User类是要求的,需要被qx注册,注册对象(数据库中对应的表结构)User示例如下:
tableUser.h文件

#ifndef USER_H
#define USER_H
#include "precompiled.h"

/******************************************************************
 * User 类对应的是数据库中的 User 表,而类的属性对应的是表中的一个字段(列)
 * 所以,User 类实例对应 User 数据库表中的一条记录(record)
 * 以上都需要的Qx注册
 * ***************************************************************/
class APP_DLL_EXPORT User
{
public:
    User():id(0)
    { }
    ~User()
    { }

    //user的属性
    long id;
    QString name;
    int age;
};

/************************************************************
 * QX_REGISTER_HPP_APP 宏是必须的,用于将 User 类注册到 QxOrm 的上下文中
 * 参数一:表示要注册的当前类 - User
 * 参数二:基类,如果没有基类,则使用 qx::trait::no_base_class_defined
 * 参数三:用于序列化的类版本
 * ***********************************************************/
QX_REGISTER_HPP_APP(User, qx::trait::no_base_class_defined, 1)
#endif // USER_H

tableUser.cpp文件

#include "tableUser.h"
#include <QxOrm_Impl.h>

//与QX_REGISTER_HPP_APP宏一样
QX_REGISTER_CPP_APP(User)

namespace qx
{
    /**************************************************************
     * qx::register_class() 是一个设置函数
     * 用于将 User 类对应的属性 注册到 QxOrm 的上下文中
     * ***********************************************************/
    template <> void register_class(QxClass<User> & t)
    {
        // 注册 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");
    }
}

4. 接口说明

4.1. 设置数据库驱动类型

        qx::QxSqlDatabase::getSingleton()→setDriverName(driverName); 

4.2. 连接数据库

        qx::QxSqlDatabase::getSingleton()->setHostName(hostname);
        qx::QxSqlDatabase::getSingleton()->setPort(port);
        qx::QxSqlDatabase::getSingleton()->setDatabaseName(tableName);
        qx::QxSqlDatabase::getSingleton()->setUserName(userName);
        qx::QxSqlDatabase::getSingleton()→setPassword(password);

4.3. 创建数据库

    /**
    *@brief 创建数据库
    *@param [in] : t : 数据库表结构
    *@return true 创建成功
    **/
    template<class T>
    bool createTable(T t)
    {
        QSqlError daoError = qx::dao::create_table(t);
        if (daoError.type() != QSqlError::NoError)
        {
            qInfo() << "createTable data failed,error:" << daoError.text();
            return false;
        }
        return true;
    }

4.4. 插入数据库

    /**
    *@brief 插入数据
    *@param [in] : t : 插入数据表格结构或者类
    *@return true 插入数据是否成功
    **/
    template<class T>
    bool insertData(T t)
    {
        QSqlError daoError = qx::dao::insert(t);
        if (daoError.type() != QSqlError::NoError)
        {
            qInfo() << "insertData data failed,error:" << daoError.text();
            return false;
        }
        return true;
    }

4.5. 查询数据库

 /**
 *@brief 查询数据
 *@param [in] : t : 插入数据表格结构或者类
 *@return true 查询数据是否成功
 **/
 template<class T>
 bool queryData(qx_query query, T& t)
 {
     QSqlError daoError = qx::dao::fetch_by_query(query, t);
     if (daoError.type() != QSqlError::NoError)
     {
         qInfo() << "queryData data failed,error:" << daoError.text();
         return false;
     }
     return true;
 }

 /**
 *@brief 通过id查询数据库
 *@param [in][out] : t : 插入数据表格结构或者类
 *@return true 查询数据是否成功
 **/
 template<class T>
 bool queryDataById(T& t)
 {
     QSqlError daoError = qx::dao::fetch_by_id(t);
     if (daoError.type() != QSqlError::NoError)
     {
         qInfo() << "queryDataById data failed,error:" << daoError.text();
         return false;
     }
     return true;
 }

 /**
 *@brief 查询所有数据
 *@param [in] [out]: t: 插入数据列表
 *@return true 查询数据是否成功
 **/
 template<class T>
 bool queryAllData(T& t)
 {
     QSqlError daoError = qx::dao::fetch_all(t);
     if (daoError.type() != QSqlError::NoError)
     {
         qInfo() << "queryAllData data failed,error:" << daoError.text();
         return false;
     }
     return true;
 }

4.6. 删除数据

    /**
    *@brief 删除数据
    *@param [in]: t: 删除数据结构体、类列表或结构体、列表
    *@return true 删除数据是否成功
    **/
    template<class T>
    bool deleteAllData(T t)
    {
        QSqlError daoError = qx::dao::delete_all(t);
        if (daoError.type() != QSqlError::NoError)
        {
            qInfo() << "deleteAllData data failed,error:" << daoError.text();
            return false;
        }
        return true;
    }

    /**
    *@brief 通过id删除数据
    *@param [in]: t: 删除数据结构体、类列表或结构体、列表
    *@return true 删除数据是否成功
    **/
    template<class T>
    bool deleteDataById(T t)
    {
        QSqlError daoError = qx::dao::delete_by_id(t);
        if (daoError.type() != QSqlError::NoError)
        {
            qInfo() << "deleteDataById data failed,error:" << daoError.text();
            return false;
        }
        return true;
    }

    /**
    *@brief 通过查询条件删除数据
    *@param [in]: query: 查询条件
    *@return true 删除数据是否成功
    **/
    template<class T>
    bool deleteDataByQuery(qx_query query)
    {
        QSqlError daoError = qx::dao::delete_by_query<T>(query);
        if (daoError.type() != QSqlError::NoError)
        {
            qInfo() << "deleteDataByQuery data failed,error:" << daoError.text();
            return false;
        }
        return true;
    }

4.7. 更新数据

    /**
    *@brief 更新数据
    *@param [in]: t: 模板类
    *@return true 更新数据是否成功
    **/
    template<class T>
    bool updateData(T t)
    {
        QSqlError daoError = qx::dao::update(t);
        if (daoError.type() != QSqlError::NoError)
        {
            qInfo() << "updateData data failed,error:" << daoError.text();
            return false;
        }
        return true;
    }

标签:QxOrm,qx,QSqlError,dao,接口,daoError,bool,User,搭建
From: https://blog.csdn.net/weixin_37724132/article/details/141163184

相关文章

  • Python搭建一个下载服务器
    一、Python2搭建一个下载服务器 1、查看是python2环境 2、执行 python-mSimpleHTTPServer 3、阿里云放开8000安全组4、直接查看路径   二、Python3搭建一个下载服务器cd/homepython3-mhttp.server 下载页面 ......
  • 接口与抽象类区别
    接口:接口主要用来约束某个实物实现,制定规范抽象类:抽象类可以理解用来复用代码。  区别。1.接口不考虑default方法,则只需要声明方法,不需要实现。而类可以写具体实现。2.抽象类可以有构造函数,接口不能有3.单继承,多实现,一个类只能一次继承指定类,而接口可以多实现。  使......
  • 关于渗透测试靶场搭建的问题(小白经验)
    前言可能会有点啰嗦可以跳过我唠叨的环节,在我学习网络安全的过程中我遇到的问题总是多到离谱可以说比一般人多所以我比较的有点自信做这篇文章总结,当然文章末尾有整合资源懒人就直接拿吧,如果有不对的地方请毫不保留的指出谢谢——————————————————————......
  • 一个基于 Java 接口参数加密框架,让接口参数加密变得简单、优雅!
    SecurityApiv1.0.1一个基于Java接口参数加密框架,让接口参数加密变得简单、优雅!文章目录一、SecurityApi介绍二、SecurityApi依赖三、使用1.RSA加密(非对称加密)1.1简单示例1.2生成RSA密钥1.3加签名说明「第一个场景」B要给A传递一条加密消息「第二个场景」B......
  • 搭建基于Grafana+JMeter+InfluxDB的性能监控与分析平台(Linux版)
    搭建基于Grafana+JMeter+InfluxDB的性能监控与分析平台(Linux版)在软件开发和运维领域,性能监控与分析是确保应用稳定性和用户体验的关键环节。随着应用规模的不断扩大和复杂度的增加,传统的性能测试工具和方法已难以满足需求。本文将详细介绍如何搭建一个基于Grafana、JMeter和Influ......
  • 短信接口-短信API-短信发送
    接口简介:短信验证码api,营销短信群发功能,群发短信可自动过滤无效号码后再发送。节约运营成本,每超过70个字符按一条短信计费。通过后台添加签名,再添加模版接口地址:https://www.wapi.cn/api_detail/86/204.html批量功能:https://www.wapi.cn/batch/detail_86.html网站地址:htt......
  • Apache SeaTunnel 2.3.5 Zeta-Server集群环境搭建与使用
    作者|月影幽篁在当前数据驱动的业务环境中,快速且高效的数据处理能力至关重要。ApacheSeaTunnel以其卓越的性能和灵活性,成为数据工程师和开发者的首选工具之一。本文将介绍如何在集群环境中搭建ApacheSeaTunnel2.3.5版本的Zeta-Server,并概述其使用方法。SeaTunnel二进制包......
  • 教程:搭建一个我的世界模组服务器(Linux)
    需要什么?一点点Linux基础一个服务器一个公网IP(也可以去搜索内网穿透)安装Java你的电脑和服务器都需要安装java,windows直接去官网下载即可。Linux的话sudoapt-getinstalldefault-jdk(测试平台为Debian)其他linux发行版的话安装也很简单,就不说了。下载Forge百度去搜......
  • 仿肯德基,麦当劳饭店餐饮外卖点餐小程序APP源码搭建
    这是后台基于ThinkPHP8+野兔后台管理系统+uniapp框架开发的,APP端跟小程序差不多的,有点类似肯德基,麦当劳,喜茶外卖点餐小程序APP开发建设,支持多店铺模式,支持子商户模式等。系统名称:野兔在线工具系统系统语言:支持多语言,大概有20种系统源码:不加密,开源程序演示:https:......
  • springboot集成integration-ip搭建TCP Client
    1、创建客户端属性类tcp:client:host:127.0.0.1port:5001@Data@ConfigurationProperties("tcp.client")publicclassTcpClientProperties{privateStringhost;privateIntegerport;}2、集成integration-ip配置@Slf4j@Configuration@......