QxOrm环境搭建以及接口编写

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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值