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...

完整介紹QxOrm首頁QxOrm文檔QxOrm下載 | 授權協議:  LGPL

 

 

主要特性:

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最適合用來開發了。

 

 

參考文章:

1、介紹一個C++的ORM工具ODB(一)

2、介紹一個C++的ORM工具ODB(二)

3、C++的ORM框架 QxOrm

     QXORM 使用記錄

      QXORM 使用記錄(二)

       QXORM 使用記錄(三)

4、其他文章就不一一列舉了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM