用過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 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最適合用來開發了。
參考文章:
4、其他文章就不一一列舉了。