c++ 数据持久层研究(一)

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

时间: 2024-12-12 14:01:54

c++ 数据持久层研究(一)的相关文章

UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软推荐使用Sqlite吧! 2,简单!就只有一个类库没有多余的参照什么的.不像其他数据库还得做复杂配置什么的麻烦! 3,不需要数据库服务,数据服务和客户都在同一个进程里面.如下图: 4,作为存储系统它只支持一个用户一个数据实体. 5,跨平台跨结构,这个好! Sqlite主要使用内容 如果想充分使用好S

数据持久层

1.数据持久化 数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型, 存储模型可以是关系模型.XML.二进制流等. cmp和Hibernate只是对象模型到关系模型之间转换的不同实现. 数据持久化的好处: 1.程序代码重用性强,即使更换数据库,只需要更改配置文件,不必重写程序代码. 2.业务逻辑代码可读性强,在代码中不会有大量的SQL语言,提高程序的可读性. 3.持久化技术可以自动优化,以减少对数据库的访问量,提高程

Java数据持久层框架 MyBatis

MyBatis 详细介绍 MyBatis 的前身就是 iBatis .是一个数据持久层(ORM)框架. iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的 JPetStore实例. 源码来源:minglisoft.cn/technology

数据持久层(二)

在对象-关系数据库之间提供一个成功的企业 级映射解决方案,尽最大可能弥补这两种范例之间的差异. 持久就是对数据的保持,即对程序状态的保持.通常通过数据库实现持久层是把数据库实现这块当作一个独立逻辑拿出来.说白了,就是数据库程序是在内存中的,为了使程序运行结束后状态得以保存,就要保存到数据库使用ORM(对象关系数据库映射)技术可以避免代码直接操作数据库,增加可移植性,可扩展性,可维护性. J2EE 的三层结构是指表示层( Presentation ),业务逻辑层( Business Logic )

Rexdb:高性能的数据持久层(ORM)框架

Rexdb是一款使用Java语言编写的,开放源代码的数据持久层框架(腾云科技ty300.com).提供了查询.更新.批处理.调用.(JTA)事务.数据源管理等功能,可以取代Mybatis.Hibernate作为系统的核心ORM框架(基础教程qkxue.net). Rexdb提供了工具类风格的接口,不需要编写映射配置,使用简便:同时,它还具备同类框架中最高效的执行效率. Rexdb的某次性能测试结果为:查询性能是Hibernate的2.3倍,Mybatis的1.7倍.

Hibernate: 数据持久层框架

Hibernate 是一种Java语言下的对象关系映射解决方案. 它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有.基于LGPL V2.1协议发布. 它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来.无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate. Hibernate不仅负

数据持久层框架iBatis, Hibernate 与 JPA 比较

在本文中我们介绍并比较两种最流行的开源持久框架:iBATIS和Hibernate,我们还会讨论到Java Persistence API(JPA).我们介绍每种解决方案并讨论其所规定的品质,以及在广泛的应用场景中其各自的长处和缺点.然后我们会基于诸如性能.移植性.复杂性以及对数据模型改变的适应性等因素来比较iBATIS.Hibernate和JPA. 如果你是一个刚起步的Java程序员,新接触持久性概念的话,那么就把阅读此文当作是接受一次这一主题以及大部分流行的开源持久性解决方案的启蒙.如果你对这

Java数据持久层框架 MyBatis之背景知识二

对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习是最好的办法.J 一.概述 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO) iBATIS框架 二.历史变迁 MyBatis 本是apache的一个开

数据持久层核心架构

Query接口: 负责查询(对外提供服务的核心类) QueryFactory类: 负责根据配置信息创建query对象 TypeConvertor接口: 负责类型转换(数据库类型与Java类型转换) TableContext类: 负责获取管理数据库所以表结构和类结构的关系,并可以根据表结构生出类结构 DBManager类: 根据配置信息,维持连接对象的管理(增加连接池功能) 工具类: 常用JDBC操作.字符串操作.封装Java文件操作.封装常用反射操作.