ODB 基本概念
ODB 是一个针对 C++ 的对象关系映射(ORM)库,它允许开发者以面向对象的方式操作数据库,将 C++ 对象与数据库表进行映射,从而避免直接编写 SQL 语句,简化数据库操作。
特点:
- 对象 - 关系映射:将 C++ 类映射到数据库表,类的成员变量映射到表的字段,对象的创建、修改、删除等操作会自动转换为对应的数据库操作(如 INSERT、UPDATE、DELETE)。
- 代码生成机制:ODB 不依赖运行时反射(C++ 本身不支持),而是通过编译期代码生成实现映射:开发者使用特殊的注解(如 #pragma db object)标记需要持久化的类,然后通过 ODB 编译器生成与数据库交互的代码(如 SQL 语句、CRUD 函数等)。
- 支持多数据库:兼容主流数据库,如 MySQL、PostgreSQL、SQLite、Oracle 等,切换数据库时无需修改核心业务代码,只需调整配置。
- 查询能力:提供类似 SQL 的查询接口(通过 C++ 表达式构建),例如通过 query 类组合条件,实现复杂查询逻辑,避免手写 SQL。
- 事务支持:内置事务管理机制,确保数据库操作的原子性、一致性、隔离性和持久性(ACID)。
ODB 框架安装
build2 安装: 安装步骤参考 build2 官方文档。
curl -sSfO https://download.build2.org/0.17.0/build2-install-0.17.0.sh sh build2-install-0.17.0.sh
安装 odb-compiler:
sudo apt-get install gcc-11-plugin-dev mkdir odb-build && cd odb-build bpkg create -d odb-gcc-N cc config.cxx=g++ config.cc.coptions=-O3 config.bin.rpath=/usr/lib config.install.root=/usr/ config.install.sudo=sudo cd odb-gcc-N bpkg build odb@https://pkg.cppget.org/1/beta bpkg test odb test odb-2.5.0-b.25+1/tests/testscript{testscript} tested odb/2.5.0-b.25+1 bpkg install odb export PATH=${PATH}:/usr/local/bin odb --version
安装 ODB 运行时库:
cd .. bpkg create -d libodb-gcc-N cc config.cxx=g++ config.cc.coptions=-O3 config.install.root=/usr/ config.install.sudo=sudo cd libodb-gcc-N bpkg add https://pkg.cppget.org/1/beta bpkg fetch bpkg build libodb bpkg build libodb-mysql
安装 boost profile 库:
bpkg build libodb-boost
总体打包安装:
bpkg install --all --recursive
常见操作
提示:接下以映射到 mysql 数据库为示例演示
核心头文件
/* 在 C++ 中,要使用 ODB 将类声明为持久化类,需要包含 ODB 的核心头文件,并使用 #pragma db object 指令 */
#include <cstddef>
#include <boost/date_time/posix_time/posix_time.hpp>


