QtDao
QtDao
是一个用于qt中数据库操作与c++对象操作进行转换的库。通常情况下,在Qt中使用不同的数据库插件进行数据库的查询后,得到的是通用的QVariant数据列表,然而这些数据我们得手动转换成业务中的数据模型,这是个重复机械的操作。通过QtDao库,自动完成数据库查询结果到c++对象的转换,支持基本的增删改查操作,同时支持一些常用的特性(创建数据库、数据库升级、多线程查询与连接池的管理等,这也是目前主流数据库框架支持的一些特性),其设计使用目前主流的链式调用设计模式,一个简单的数据库查询如下:
TestTb::Fields sf;
TestTb data = dao::_select<TestTb>()
.filter(sf.name == "Alice", _or(sf.age == 18, sf.name == "Bob"))
.build().one();
等同于执行以下sql语句:
select *from testtb where name='Alice' and (number=18 or name='Bob')
工作原理
QtDao整个框架依赖于c++模板,对类型的限制和转换的目标对象都通过模板支持,同时依赖于代码生成器(vscode插件市场中搜索QtDao
)将数据库表配置转换成c++模型类(并附带一些转换工具函数),通过模板和代码生成器的配合将数据库查询语句与c++类之间完成相互转换。
如何安装使用
在使用QtDao库之前,需要完成以下步骤的准备工作:
- 编写数据表xml配置文件,使用生成器生成c++模型类
- 生成并静态链接到QtDao库,将生成器生成的文件加入到编译列表中
- 编写初始化代码
支持的数据库
经过大量的测试和版本迭代,目前受支持的数据库操作有3种:sqlite、mysql、sqlserver,在未来将计划加入更多的数据库支持,不同的数据库操作使用统一的api,仅仅通过修改少量的连接配置,就能够实现不同数据库之间的快速切换使用。