c++ 数据持久层研究(一)
用过Java的都知道SSH框架,特别对于数据库开发,Java领域有无数的ORM框架,供数据持久层调用,如Hibernate,iBatis(现在改名叫MyBatis),TopLink,JDO,JPA……非常方便实用。
用过C#的同学们也都知道通过CodeSmith软件,生成微软的PetShop分层模式,达到数据持久层的代码,也非常方便。
那么我们用C++的怎么办,我们也是面向对象编程,在工作中也有数据库需要管理。我们需要完全手工去写那些重复性的代码吗?
特别我现在采用的是Qt这种非常标准的C++语言。
很希望能快速的开发软件,把重心放在软件的架构、控制系统、通信系统、文件传输系统、以及图像处理上。不想在数据库上有过多的累赘。那么我们也需要一个轻量级的ORM。
一、前期搜索
就我目前的了解,我知道,现在有多款免费的软件,可以实现自动生成C++数据持久层的代码!
1、QxOrm :QxOrm 是一个 C++ 库用来提供 ORM 功能,基于 Qt 的 QtSql 库。
授权协议: LGPL
开发语言: C/C++
操作系统: 跨平台
QxOrm 是一个 C++ 库用来提供 ORM 功能,基于 Qt 的 QtSql 库。 主要特性: persistence : communication with a lot of databases (with 1-1, 1-n, n-1 and n-n relationships) serialization : binary and xm...
主要特性:
persistence : communication with a lot of databases (with 1-1, 1-n, n-1 and n-n relationships)
serialization : binary and xml format
reflection : access to classes definitions, retrieve properties and call classes methods
优点:
non intrusive : the C++ setting function doesn't modified class definition, QxOrm can be used in existing projects
no code generation
no xml mapping file
classes doesn't need to inherit from a 'super object'
template meta-programming : no macro hack
works with Visual C++ 2008 or 2010 on Windows and GCC 4.4.1 on Linux (other platforms will be tested soon : Mac, phones...)
only one file <QxOrm.h> to include in precompiled-header (need precompiled-header file to reduce compilation times)
貌似这些外网无法正常访问,下载比较困难
可以访问这个下载地址,里面有QxOrm的所有版本,提供下载。我的页面附件上有QxOrm_1.2.2.zip 提供下载。
2、LiteSQL :是一个C++的数据库持久层框架,支持 SQLite3、MySQL和PostgreSQL数据库。
官方网站:http://sourceforge.net/apps/trac/litesql
3、ODB:ODB 是一个开源的,支持多平台,支持多数据库的 C++ 的 ORM 框架,可将 C++ 对象数据库表映射,进行轻松的数据库查询和操作。ODB支持Mysql、SqlLite、PostgreSQL、Oracle等数据库
官方网站:http://www.codesynthesis.com/products/odb/download.xhtml
ODB支持特性
自动生成数据库支持的代码(跨数据库)
能够处理任何的标准C++代码(无开发平台限制)
根据类的定义,编译生成数据库表单(可在Visual Studio中配置编译命令)
表单是以独立的SQL文件,或者嵌入C++的SQL代码的形式存在的
支持面向对象的持久化模型和数据库API(提供简单易用的数据库操作方法)
支持基于表达式或者类型安全的对象查询语言
ODB使用了版本控制
支持执行本地SQL语言
支持SQL跟踪(输出窗口可实时输出当前执行的SQL语句)
跨平台,提供连接池保证线程安全
关于映射
默认映射所有基本的C++类型和std::string
自动映射C++的枚举对象到数据库的ENUM类型或者整型
支持映射BLOB类型到std::vector<char>
支持合成值类型(自动解析成多字段)
支持NULL语义映射到智能指针,诸如odb::nullable or boost::optional.
支持分配表名到持久类
支持分配字段名到数据成员
支持映射C++类型到数据库类型
支持自动赋值的对象id
支持没有id的持久化类
支持只读/常量数据成员
支持使用自定义的智能指针作为object/view/value的指针
支持cache技术(使用session)
具体使用可以见官方的odb手册,在这里
具体有何区别,如何用,优缺点?我还得深入了解。等我开发这块,再总结。希望各位能提出意见。
二、C++这些ORM框架的区别
前段时间了解了下ORM(对象关系映射),然后就找了下C++的ORM框架,发现真的是很少,主要就下面几种
名称 开源 License 需要特定的框架支持 支持Qt 支持Boost 支持MySQL 支持PostgreSQL 支持SQLite 支持XML 支持Oracle 支持MSSQL Server 支持ODBC 支持IBM DB2
| LiteSQL | Yes | BSD | no | Yes | Yes | Yes | Yes | ||||||
| ODB | Yes | GPL/other | no | Yes | Yes | Yes | Yes | Yes | Yes | ||||
| QxOrm | Yes | LGPL | yes, Qt | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
| Wt::Dbo | Yes | GPL / commercial | yes, Wt | No | Yes | Yes | Yes | Yes | No | No | No | No | No |
LiteSQL用xml定义表单,而且感觉它好像是把所有库的支持都写到一个动态链接库里面去了,所以比较庞大,QxQrm、Wt::Dbo又依赖于特定的框架。所以综合考虑,感觉ODB最适合用来开发了。
参考文章:
4、其他文章就不一一列举了。
c++ 数据持久层研究(一)的更多相关文章
- UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?
选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...
- .NET平台下,关于数据持久层框架
在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...
- .NET开源项目介绍及资源推荐:数据持久层
在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...
- Restful.Data v1.0 - 轻量级数据持久层组件, 正式开源发布了
经过几个星期的优化调整,今天 Restful.Data 正式开源发布. 源码地址:https://github.com/linli8/Restful 今天不写那么多废话了,还是重新介绍一下 Restf ...
- .NET平台数据持久层框架
在.NET平台下的几个数据持久层框架: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS.NET 5.DAAB 6.DLinq
- [置顶] 数据持久层(DAO)常用功能–通用API的实现
在Web开发中,一般都分3层. Controller/Action 控制层, Service/Business 服务层/业务逻辑层, Dao 数据访问层/数据持久层. 在学习和工作的实践过程中,我发现 ...
- Java数据持久层框架 MyBatis之背景知识一
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- Hibernate: 数据持久层框架
Hibernate 是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hi ...
- 数据持久层(DAO)通用API的实现
在Web开发中,一般都分3层.Controller/Action 控制层,Service/Business 服务层/业务逻辑层,Dao 数据访问层/数据持久层. 在学习和工作的实践过程中,我发现很多功 ...
随机推荐
- spring cloud官方文档提到的服务开发的12项要素。
I. Codebase 从一个代码库部署到多个环境. II. Dependencies 使用显式的声明隔离依赖,即模块单独运行,并可以显式管理依赖. III. Config 在系统外部存储配置信息. ...
- bzoj2738
感人肺腑pascal过不去系列,跪求开O2先不说这个了,学完cdq分治之后又顺手学了一下整体二分感觉这两个东西很多相似的地方,干脆都叫cdq分治好了二分解决k小就是设当前二分的答案为m,把x<= ...
- 用jQuery 处理XML-- jQuery与XML
jQuery与XML 快而强的遍历系统,华丽丽的选择器语法,这或许是jQuery 那么流行的原因.当然它还有详尽的文档.它主要是用来处理HTML的,但在这里妳会看到如何应用到XML. 使用jQuery ...
- MFC VS2005 添加Override 和 Message
VS2005 1.Overrides OnInitDialog() 在Class View选中 这个类,然后properties中点Message 旁边的Overrides, 添加OnInitDial ...
- 安全delete,添加refenerce,release
#ifndef SAFE_ADDREF#define SAFE_ADDREF(p) if (p != NULL) { p->AddRef(); }#endif #ifndef SAFE_R ...
- ruby编程语言-学习笔记2(第4章 表达式和操作符)
对属性和数组元素的赋值 o.m + = 1 ===>o.m = (o.m()+ 1) # 对 o.m()这个方法的结果+1 对数组元素的赋值也是通过 方法调用来完成. 0.[] = 1 == ...
- Windows中APACHE开启fastcgi后无法连接数据库
环境:Windows server 2003 x64Apache 2.2.14mod_fcgid-2.2b-w32.zipPHP VC9 x86 Non Thread Safe(用Visual C++ ...
- LightOJ 1341 Aladdin and the Flying Carpet 数学
题意:给个矩形的面积a,和矩形的最小边长b,问有多少种矩形的方案(不能是正方形) 分析:a可以写成x,y,因为不能是正方形,所以设x<y,那么x<sqrt(a),y>sqrt(a) ...
- 【原】实战-Java如何使用Redis
实战-Java如何使用Redis Redis的Client支持的语言非常丰富,如下: ActionScript Bash C C# C++ Clojure Common Lisp Crystal D ...
- NOIP2000 乘积最大
题二 乘积最大 (22分) 问题描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏 ...