`
qimo601
  • 浏览: 3449011 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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

阅读更多

用过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、其他文章就不一一列举了。

 

0
0
分享到:
评论
1 楼 thisisw 2014-11-16  
qxorm下载后 解压失败:)

相关推荐

    C ++对象关系映射(ORM)-吃包子-N的第1部分

    **C++对象关系映射(ORM):吃包子N的第1部分** 对象关系映射(ORM,Object-Relational Mapping)是一种编程技术,用于将关系数据库的数据模型映射到面向对象的编程语言中,使得开发者可以使用面向对象的方式来操作...

    cpp-orm:C++ 对象关系映射器(计划中)

    **C++ ORM (对象关系映射) 知识详解** 对象关系映射(ORM,Object-Relational Mapping)是一种编程技术,它允许开发者使用面向对象的编程语言来操作数据库,而无需关注底层的SQL语句。C++ ORM库是这种技术在C++中的...

    YB.ORM:用于C ++的对象关系映射(ORM)的工具-开源

    YB.ORM是用于C ++的对象关系映射(ORM)的工具。 受到Hibernate或SQLAlchemy之类的启发。 应该与数据库无关。 包括用于域对象代码生成的工具。 表的元数据描述是一个XML文件。

    cpp-SQLiteORM用于现代C的SQLiteORM库只有header

    标题中的"cpp-SQLiteORM用于现代C++的SQLite ORM库只有header"表明这是一个关于C++的SQLite对象关系映射(ORM)库,且该库仅包含头文件,这意味着开发者无需链接任何库文件,只需包含相应的头文件即可使用。ORM是一...

    QxOrm-C ++ ORM(对象关系映射)库

    QxOrm是一个强大的C++ ORM(对象关系映射)库,它允许开发人员将数据库操作与业务对象直接关联,从而简化了数据访问层的代码编写。这个库是基于QtSql库构建的,提供了对多种数据库系统的支持,如MySQL和Oracle,同时...

    cpp-hiberlite用于Sqlite3的C对象关系映射

    cpp-hiberlite是一个高效、轻量级的对象关系映射(ORM)库,专为C++与SQLite3数据库集成设计。ORM允许开发者用面向对象的方式来操作数据库,将数据库表的概念映射到类和对象上,减少了对SQL语句的直接依赖,提高了...

    sqlite3的ORM框架

    SQLite3的ORM(Object-Relational Mapping)框架是一种在C++编程中将数据库关系模型与对象模型进行对应的技术。ORM框架使得开发者可以使用面向对象的方式来操作数据库,避免了直接编写SQL语句,提高了开发效率和代码...

    C++ ORM for SQLite.zip

    C++ ORM for SQLite 是一个将C++编程语言与SQLite数据库管理系统相结合的对象关系映射(ORM)框架。ORM允许程序员以面向对象的方式操作数据库,而无需直接编写SQL语句,简化了数据库应用程序的开发过程。在C++中使用...

    dquest:DQuest - Qt 框架的 C++ ORM(对象关系映射)

    DQuest 是 Qt 框架的 C++ ORM(对象关系映射)。 它旨在为具有数据库访问权限的应用程序提供快速开发环境。 数据库模型声明非常简单,就像其他 C++/Qt 类(示例)一样。 它专为移动环境而设计,但也适用于不需要最大...

    一个小的ORM,实现了一些基本的数据库对象操作

    ORM,全称Object-Relational Mapping,是对象关系映射技术。它是一种编程技术,用于将关系数据库的数据映射到对象上,使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层SQL语句的编写。ORM的核心思想...

    QxOrm:QxOrm库-C ++ Qt ORM(对象关系映射)和ODM(对象文档映射器)库-官方存储库

    QxOrm是一个强大的开源库,专门用于C++编程语言,并且与Qt框架紧密集成,提供了ORM(对象关系映射)和ODM(对象文档映射器)的功能。这个库允许开发者将数据库操作与业务逻辑解耦,使得在C++应用程序中处理数据库...

    dbobject:用于 C++ 的基于模板的对象关系映射器

    数据库对象dbobject 是对象关系映射器和 SQL 编写器助手之间的混合,用于 C++。 ORM 部分将 C++ 类映射到 SQL 数据库中的表: 数据库C++ 桌子班级柱子class' 属性(或 setter/getter 方法) 排类实例SQL 编写器帮助...

    bun:Bun是易于使用的C ++对象数据库,对象关系映射器(ORM)和键值库

    Bun是一个功能强大的C++库,它集合了多种数据库管理功能,包括对象数据库、对象关系映射器(ORM)和键值存储。这个框架的主要目标是简化C++开发者与数据库的交互,提供一种高效且易用的方式来管理和操作数据。下面...

    orm-qt:使用Qt库进行对象关系映射

    ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,用于将关系数据库的数据映射到面向对象的编程语言中。在C++的世界里,ORM框架使得开发者可以使用面向对象的方式来操作数据库,而无需直接编写SQL...

    qt开发的orm

    Qt ORM(对象关系映射)是一种在Qt框架下实现数据库操作的技术,它允许开发者使用面向对象的方式来处理数据库数据,而无需直接编写SQL语句。ORM技术的核心思想是将数据库中的表映射为对象,表中的行映射为对象实例,...

    C++ 持久层

    这种技术通常被称为对象关系映射(ORM,Object-Relational Mapping),其目标是将数据库的操作转换为对对象的操作,简化了数据访问的复杂性。 描述中提到的"C++持久层"是一个高效且易于使用的库,它的设计目的是...

    Hibernate一对多,多对一映射

    在Java的持久化框架中,Hibernate是一个非常重要的存在,它为开发者提供了强大的对象关系映射(ORM)功能,使得在数据库操作上可以更加便捷地使用面向对象的方式。本主题将深入探讨Hibernate中的一对多和多对一映射...

    Inloquent:基于C ++ Qt的类似Laravel-Eloquent的对象关系映射框架

    Inloquent是一个专为C++ Qt开发者设计的ORM(对象关系映射)框架,它借鉴了流行的PHP框架Laravel中的Eloquent ORM的设计理念,使得在C++环境中进行数据库操作变得更加简洁和高效。ORM框架的核心思想是将数据库表映射...

    Redis 的对象哈希映射.zip

    欧姆ॐRedis 的对象哈希映射库。描述Ohm 是一个用于在...C++ 的redis3mOhmoc for Objective-C,由 seppo0010 创建Sohm for Lua,兼容Twemproxy文章和演讲简单如何使用 RedisRedis 和 OhmOhm (Redis ORM)(日语)Redis

    c++调用数据库开发包

    ORM,即对象关系映射(Object-Relational Mapping),是一种编程技术,它允许程序员使用面向对象的方式来操作数据库,而无需直接编写SQL语句。ORM简化了数据库操作,提高了代码可读性和可维护性。 "ccORM"是本文将要...

Global site tag (gtag.js) - Google Analytics