作为一名 C++ 开发者,你是否还在为手写 SQL、处理数据库连接、维护表结构与代码实体的映射关系而头疼?ODB(Object-Relational Mapping)作为 Code Synthesis 推出的 C++ ORM 工具,能帮我们把 C++ 类直接映射到数据库表,彻底摆脱重复的数据库操作代码。这篇文章会从 ODB 2.5 的安装踩坑,到实战代码解析,带你完整掌握这个工具 —— 文末还附了可直接复用的 DAO 层封装,新手也能快速上手。
一、先搞懂:ODB 到底能帮我们做什么?
简单说,ODB 是 “C++ 类” 和 “数据库表” 之间的桥梁:
-
不用手写 CREATE TABLE,ODB 能根据 C++ 类自动生成数据库 schema;
-
不用写 INSERT/UPDATE/SELECT,调用 ODB 的
persist()/update()/query()就能操作数据; -
自动处理 C++ 类型与 MySQL 类型的映射(比如
std::string对应VARCHAR,boost::posix_time对应TIMESTAMP); -
支持事务、连接池,解决多线程下的数据库操作安全问题。
本文用到的示例代码来自 “比特就业课” 的 C++ 聊天系统项目,完整代码可在 Gitee 获取:cpp-chatsystem。
二、ODB 2.5 安装:避坑指南(Linux 环境)
ODB 安装依赖build2编译工具,整个过程大概 3-5 小时(主要耗在网络下载),重点注意版本兼容性和网络超时问题。
2.1 第一步:安装 build2(编译基础)
build2 是 ODB 的依赖工具,用来构建后续的 ODB 编译器和运行时库。注意:build2 版本会更新(比如从 0.17 升到 0.18),安装前先去build2 官网确认最新步骤,这里以 0.17.0 为例:
- 下载并执行安装脚本(在 PowerShell 或终端执行):
# 进入工作目录(比如~/workspace)
cd ~/workspace
# 下载安装脚本
curl -sSfO https://download.build2.org/0.17.0/build2-install-0.17.0.sh
# 执行脚本(默认安装到/usr/local/bin)
sh build2-install-0.17.0.sh
-
踩坑点 1:网络超时
如果执行脚本时卡在 “下载文件” 步骤,提示 “timeout”,给脚本加
--timeout 1800(超时时间设为 30 分钟):
sh build2-install-0.17.0.sh --timeout 1800
2.2 第二步:安装 ODB 编译器(odb-compiler)
ODB 编译器的作用是:把带#pragma db指令的 C++ 类(比如Person),生成数据库操作的支持代码(比如person-odb.cxx)。
- 先装 gcc 插件开发包(注意替换成你系统的 gcc 版本):
# 查看gcc版本:gcc --version,比如我的是gcc-11
sudo apt-get install gcc-11-plugin-dev
- 创建构建目录并初始化编译配置:
# 创建odb-build目录,避免污染源码
mkdir odb-build && cd odb-build
# 初始化cc编译环境,指定g++为编译器,优化等级O3,安装路径/usr
bpkg create -d odb-gcc-N cc \
config.cxx=g++ \
config.cc.coptions=-O3 \
config.bin.rpath=/usr/lib \
config.install.root=/usr/
- 编译并安装 ODB 编译器:
# 进入配置好的环境目录
cd odb-gcc-N
# 从官方源编译odb(beta版,稳定可用)
bpkg build config.install.sudo=sudo odb@https://pkg.cppget.org/1/beta
# 测试编译结果(可选,确保没问题)
bpkg test odb
# 安装odb
bpkg install odb
-
踩坑点 2:执行 odb --version 提示 “找不到命令”
这是因为 ODB 安装到了
/usr/local/bin,但系统 PATH 没包含这个路径。执行以下命令添加(永久生效):
# 把路径写入bashrc
sudo echo 'export PATH=${PATH}:/usr/local/bin' >> ~/.bashrc
# 立即生效
export PATH=${PATH}:/usr/local/bin
# 验证:成功显示版本号则没问题
odb --version
# 正确输出示例:
# ODB object-relational mapping (ORM) compiler for C++ 2.5.0-b.25
# Copyright (c) 2009-2023 Code Synthesis Tools CC.
2.3 第三步:安装 ODB 运行时库
ODB 运行时库是代码里实际调用的 API(比如odb::database、odb::transaction),需要安装核心库、MySQL 驱动和 boost 支持库。
- 创建运行时库的构建目录并初始化:
# 回到odb-build目录
cd ..
# 初始化cc环境,指定安装路径和sudo权限
bpkg create -d libodb-gcc-N cc \
config.cxx=g++ \
config.cc.coptions=-O3 \
config.install.root=/usr/ \
config.install.sudo=sudo
- 添加 ODB 官方源并安装依赖库:
# 进入libodb-gcc-N目录
cd libodb-gcc-N
# 添加ODB的beta源
bpkg add https://pkg.cppget.org/1/beta
# 拉取最新包信息
bpkg fetch
# 安装核心库(libodb)
bpkg build libodb
# 安装MySQL驱动(libodb-mysql)
bpkg build libodb-mysql
# 安装boost支持库(处理boost日期等类型)
bpkg build libodb-boost
- 统一安装所有库:
bpkg install --all --recursive
2.4 第四步:配置 MySQL(必做)
ODB 需要 MySQL 环境,包括服务端、客户端开发包,以及字符集配置。
- 安装 MySQL 和开发包:
# 安装MySQL服务端
sudo apt install mysql-server
# 安装客户端开发包(编译时需要头文件和库)
sudo apt install -y libmysqlclient-dev
- 配置 MySQL 字符集(避免中文乱码):
# 编辑my.cnf(有哪个路径用哪个)
sudo vim /etc/my.cnf 或者 sudo vim /etc/mysql/my.cnf
# 在文件末尾添加以下内容:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
bind-address = 0.0.0.0

最低0.47元/天 解锁文章
932

被折叠的 条评论
为什么被折叠?



