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