C++ 对象关系映射(ORM)介绍_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++ 对象关系映射(ORM)介绍

C++ 对象关系映射(ORM)介绍

 2012/12/16 17:23:55  qimo601  程序员俱乐部  我要评论(0)
  • 摘要:用过Java的都知道SSH框架,特别对于数据库开发,Java领域有无数的ORM框架,供数据持久层调用,如Hibernate,iBatis(现在改名叫MyBatis),TopLink,JDO,JPA……非常方便实用。用过C#的同学们也都知道通过CodeSmith软件,生成微软的PetShop分层模式,达到数据持久层的代码,也非常方便。那么我们用C++的怎么办,我们也是面向对象编程,在工作中也有数据库需要管理。我们需要完全手工去写那些重复性的代码吗?特别我现在采用的是Qt这种非常标准的C++语言
  • 标签:关系 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、其他文章就不一一列举了。

?

  • QxOrm_1.2.2.zip (8.2 MB)
  • 下载次数: 2
  • odb-manual.pdf (640.8 KB)
  • 下载次数: 11
发表评论
用户名: 匿名