使用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; // 查询一定年龄段的集合记录
有图有真相。执行前:

执行后:(并不需要写一条sql语句)

一气呵成,大功告成。各位很简单吧
使用C++的ORM框架QxORM的更多相关文章
- ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...
- 最好的5个Android ORM框架
在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...
- [Android]Android端ORM框架——RapidORM(v2.1)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6020412.html [Android]Android端ORM ...
- [Android]Android端ORM框架——RapidORM(v2.0)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5626716.html [Android]Android端ORM ...
- 轻量级ORM框架——第一篇:Dapper快速学习
我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为th ...
- ORM之殇,我们需要什么样的ORM框架?
最近在研究ORM,究竟什么样的框架才是我们想要的 开发框架的意义在于 开发更标准,更统一,不会因为不同人写的代码不一样 开发效率更高,无需重新造轮子,重复无用的代码,同时简化开发流程 运行效率得到控制 ...
- 轻量级ORM框架初探-Dapper与PetaPoco的基本使用
一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...
- ORM框架示例及查询测试,上首页修改版(11种框架)
继上次ORM之殇,我们需要什么样的ORM框架? 整理了11个ORM框架测试示例,通过示例代码和结果,能很容易了解各种框架的特性,优缺点,排名不分先后 EF PDF XCODE CRL NHiberna ...
- [Android]Android端ORM框架——RapidORM(v1.0)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4748077.html Android上主流的ORM框架有很多 ...
随机推荐
- Twitter上怎么保存视频的教程来啦
玩了多年的推特, 我发现竟然有这么便捷的方法把推特上的视频给保存下来 如果你也需要的话那么我来告诉你怎么操作吧~ Twitter(通称推特)是一家美国社交网络及微博客服务的网站 是全球互联网上访问量最 ...
- 另类终端「GitHub 热点速览 v.22.15」
作者:HelloGitHub-小鱼干 除了编译器之外,终端也是我们日常打交道的软件之一.但,你用它看过股票吗?OpenBBTerminal 不仅能让你看股票,还能让你用科学的方法进行股票投资.说到投资 ...
- Java学习day39
类加载的作用:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后在堆中生成一个代表这个类的java.lang.Class对象,作为方法区中类数据的访问入口. 类 ...
- node.js - http、模块化、npm
今天是node学习的第二天,其实越往后面学越感觉有点熟悉的味道了,光针对于node来说哈,为什么呢,因为我之前学过一点云计算的东西,当时感觉没什么用搞了下服务器客户端这些,没想到这里还能用一用,至少看 ...
- 【深入理解TcaplusDB技术】扫描数据接口说明——[List表]
摘要 实现扫描指定表格中的数据. 示例代码 同步调用参见章节:[List表]扫描数据示例代码. 异步调用参见章节:[List表]异步扫描数据示例代码. Client对象方法说明 注:如有未列出来的Cl ...
- 解决anaconda3打开不了闪退
今天想新创个环境,结果发现创不起,而且anaconda居然也进不去了. 然后尝试了网上各种方法,修改c:user/用户/用户名目录下的.condarc文件,镜像源,包括重装都没用. 最后 把.cond ...
- Oauth的学习以及开发自助上课签到脚本
附上源码: https://github.com/taka250/auto_checkin_skl_hdu 首先了解学习oauth的知识 ...
- Kafka核心组件详解
1.概述 对于Kafka的学习,在研究其系统模块时,有些核心组件是指的我们去了解.今天给大家来剖析一下Kafka的一些核心组件,让大家能够更好的理解Kafka的运作流程. 2.内容 Kafka系统设计 ...
- 【java并发编程】Lock & Condition 协调同步生产消费
一.协调生产/消费的需求 本文内容主要想向大家介绍一下Lock结合Condition的使用方法,为了更好的理解Lock锁与Condition锁信号,我们来手写一个ArrayBlockingQueue. ...
- JavaScript 单线程之异步编程
Js 单线程之异步编程 先了解一个概念,为什么 JavaScript 采用单线程模式工作,最初设计这门语言的初衷是为了让它运行在浏览器上面.它的目的是为了实现页面的动态交互,而交互的核心是进行 Dom ...