c++ 數據持久層研究(一)

用過Java的都知道SSH框架,特別對於數據庫開發,Java領域有無數的ORM框架,供數據持久層調用,如Hibernate,iBatis(如今更名叫MyBatis),TopLink,JDO,JPA……很是方便實用。html

用過C#的同窗們也都知道經過CodeSmith軟件,生成微軟的PetShop分層模式,達到數據持久層的代碼,也很是方便。sql

 

那麼咱們用C++的怎麼辦,咱們也是面向對象編程,在工做中也有數據庫須要管理。咱們須要徹底手工去寫那些重複性的代碼嗎?數據庫

特別我如今採用的是Qt這種很是標準的C++語言。編程

很但願能快速的開發軟件,把重心放在軟件的架構、控制系統、通訊系統、文件傳輸系統、以及圖像處理上。不想在數據庫上有過多的累贅。那麼咱們也須要一個輕量級的ORM。安全

 

 

1、前期搜索

 

就我目前的瞭解,我知道,如今有多款免費的軟件,能夠實現自動生成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...

完整介紹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 提供下載。

 

二、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手冊,在這裏

 

 

 

具體有何區別,如何用,優缺點?我還得深刻了解。等我開發這塊,再總結。但願各位能提出意見。

 

 

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

 

 

參考文章:

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

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

三、C++的ORM框架 QxOrm

     QXORM 使用記錄

      QXORM 使用記錄(二)

       QXORM 使用記錄(三)

四、其餘文章就不一一列舉了。

相關文章
相關標籤/搜索