用过Java的都知道SSH框架,特别对于数据库开发,Java领域有无数的ORM框架,供数据持久层调用,如Hibernate,iBatis(如今更名叫MyBatis),TopLink,JDO,JPA……很是方便实用。html
用过C#的同窗们也都知道经过CodeSmith软件,生成微软的PetShop分层模式,达到数据持久层的代码,也很是方便。sql
那么咱们用C++的怎么办,咱们也是面向对象编程,在工做中也有数据库须要管理。咱们须要彻底手工去写那些重复性的代码吗?数据库
特别我如今采用的是Qt这种很是标准的C++语言。编程
很但愿能快速的开发软件,把重心放在软件的架构、控制系统、通讯系统、文件传输系统、以及图像处理上。不想在数据库上有过多的累赘。那么咱们也须要一个轻量级的ORM。安全
就我目前的了解,我知道,如今有多款免费的软件,能够实现自动生成C++数据持久层的代码!session
一、QxOrm :QxOrm 是一个 C++ 库用来提供 ORM 功能,基于 Qt 的 QtSql 库。架构
受权协议: LGPLapp
开发语言: 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 提供下载。
二、LiteSQL :是一个C++的数据库持久层框架,支持 SQLite三、MySQL和PostgreSQL数据库。
官方网站:http://sourceforge.net/apps/trac/litesql
三、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手册,在这里
具体有何区别,如何用,优缺点?我还得深刻了解。等我开发这块,再总结。但愿各位能提出意见。
前段时间了解了下ORM(对象关系映射),而后就找了下C++的ORM框架,发现真的是不多,主要就下面几种
名称 开源 License 须要特定的框架支持 支持Qt 支持Boost 支持MySQL 支持PostgreSQL 支持SQLite 支持XML 支持Oracle 支持MSSQL Server 支持ODBC 支持IBM DB2LiteSQL | 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最适合用来开发了。
参考文章:
四、其余文章就不一一列举了。