Qt数据库对象操作库

为了更加简单的使用qt读写数据库,学习了其他编程框架的设计模式和使用习惯,编写了一个对QSqlQuery操作高度封装的c++模板库,使用链式联级调用直接获取查询结果并转化到类对象实例。
模板库地址:QtDao(https://github.com/daonvshu/QtDao

使用示例

基本查询操作:

Test1::Fields sf1;
Test1 d1 = dao::_select<Test1>()
        .filter(sf1.name == "client", _or(sf1.number == 12, sf1.name == "bob"))
        .build().one();

等价于sql语句:

select *from test1 where name='client' and (number=12 or name='bob')

复杂的join自递归操作:

class TmpTest2 : public dao::self<SqliteTest2> {};

SqliteTest1::Fields sf1;
SqliteTest2::Fields sf2;
SqliteTest3::Fields sf3;
TmpTest2::Fields sfs2;

auto recursive = dao::_recursive()
    .tmp<TmpTest2>()
    .initialSelect(
        dao::_select<SqliteTest2>().filter(sf2.number == 50).build()
    )
    .recursiveSelect(
        dao::_join<SqliteTest2, TmpTest2>()
            .columnAll<SqliteTest2>()
            .from<SqliteTest2>()
            .innerJoin<TmpTest2>().on(sfs2.number2 == sf2.number)
            .build()
    );
//join from recursive
auto join2 = dao::_join<SqliteTest1, TmpTest2, SqliteTest3>()
    .column(sfs2.name, sf1.name, sf3.name, sf1.number, sfs2.number)
    .from<SqliteTest1>()
    .innerJoin(recursive).on(sfs2.id == sf3.tbi2)
    .innerJoin<SqliteTest3>().on(sf3.tbi1 == sf1.id, sf3.name.like("client%"))
    .build().list();

等价于sql语句:

WITH ts_sqlitetest2_2 AS (
		SELECT *
		FROM ts_sqlitetest2
		WHERE number = 50
		UNION
		SELECT a.id, a.name, a.number, a.number2, a.varianttype
		FROM ts_sqlitetest2 a
			INNER JOIN ts_sqlitetest2_2 b ON b.number2 = a.number
	)
SELECT b.name, a.name, c.name, a.number, b.number
FROM ts_sqlitetest1 a
	INNER JOIN ts_sqlitetest2_2 b ON b.id = c.tbi2
	INNER JOIN ts_sqlitetest3 c
	ON c.tbi1 = a.id
		AND c.name LIKE 'client%'

支持的数据库

  • sqlite
  • mysql
  • sqlserver

支持的功能

  • 数据库初始化
    • 检查连接
    • 自动创建数据库/数据表
    • 检查版本并升级
  • 日志
    • 打印执行的sql语句
    • 打印执行的sql值列表
  • 连接池
    • 多线程查询
    • 连接名复用
  • 查询
    • insert(demo)
      • 对象(/批量)插入
      • 部分值插入
      • 插入或替换(insert or replace)
      • 使用查询结果插入(insert into select)
    • select(demo)
      • 对象查询
      • 联合(union)
      • join
      • 递归查询(recursive)(mysql)
      • 子查询(嵌套查询)
      • 自定义语句查询
      • 计数(count)
    • update(demo)
      • 条件更新
      • 对象(/批量)更新
    • delete(demo)
      • 条件删除
      • 对象(/批量)删除
    • 其他
      • 事务
      • 解释
      • sqlite写同步
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值