目录
ODB
介绍
安装
build2安装
odb-compiler安装
ODB运行时库安装
mysql和客户端开发包安装
boost profile库安装
总体打包安装
总体卸载
总体升级
头文件包含和编译时指明库
ODB常见操作介绍
类型映射
ODB编程
类与接口介绍
mysql连接池对象类
mysql客户端操作句柄类
mysql事务操作类
针对可能为空的字段封装的类似于智能指针的类型
针对查询结果所封装的容器类和条件类
mysql操作句柄获取封装
rabbitMQ C++
安装
服务器访问地址
简单使用
添加用户
UI访问
安装rabbitMQ客户端库
安装rabbitMQ的C++客户端库(AMQP-CPP)
AMQP-CPP的使用介绍
介绍
头文件包含和链接库
使用(TCP模式)
常用类与接口
channel
ev
二次封装(rabbitMQClient.hpp)
短信验证码SDK
购买
安装
头文件和编译时链接库
注意
验证码发送代码封装(verificationCodeSend.hpp)
验证码生成代码封装(utils.hpp)
语音识别SDK
介绍
安装
头文件包含
编译时指明库(注意)
代码样例
test.cc
Makefile
测试结果
语音识别代码封装(speechRecognition.hpp)
封装结果测试
本章主要是学习和使用本项目中所需使用到的一些框架。
ODB
介绍
ODB(Object-Relational Mapping for C++)是一个用于C++的对象关系映射(ORM)工具,允许开发者将C++对象直接映射到数据库表,简化数据库操作。
特点:
跨平台性 | 兼容多种数据库(MySQL、PostgreSQL、Oracle等)和操作系统(Windows、Linux、macOS等)。 |
自动生成代码 | 通过ODB编译器自动生成数据库操作的C++代码,减少手动编写SQL的工作量。 |
类型安全 | 提供编译时类型检查,减少运行时错误。 |
事务管理 | 支持事物,确保数据一致性。 |
查询语言 | 提供类似SQL的查询语言,支持复杂查询。 |
安装
ODB2.5安装,整个安装过程时间比较长,视网络情况而定。
build2安装
build2安装时,可能会版本更新,从16变成17等,因此需要特别注意。
build2安装步骤:build2 | Installation
Create the build2
build directory, for example ~/build2-build
in your home directory, then run:
$ cd ~/build2-build$ curl -sSfO https://download.build2.org/0.17.0/build2-install-0.17.0.sh$ shasum -a 256 -b build2-install-0.17.0.shb84e4114c61aa94c3f6278f010a0dc0536dda65ac39d3863152ec9b64510b86e$ sh build2-install-0.17.0.sh
Or, to upgrade from 0.16.0
:
$ sh build2-install-0.17.0.sh --upgrade
To uninstall:
$ sh build2-install-0.17.0.sh --uninstall
安装中如果因为网络问题,出现安装超时失败,解决办法是将超时时间设置得更长一些:
sh build2-install-0.17.0.sh --timeout 1800
odb-compiler安装
sudo apt-get install gcc-11-plugin-dev # gcc版本根据需求而定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=sudocd odb-gcc-Nbpkg build odb@https://pkg.cppget.org/1/betabpkg test odb
test odb-2.5.0-b.25+1/tests/testscript{testscript}
tested odb/2.5.0-b.25+1bpkg install odbodb --version# 如果报错了, 找不到ODB, 可能是没有对应的配置文件或者ODB路径, 解决方法:
sudo echo 'export PATH=${PATH}:/usr/local/bin' >> ~/.bashrc
export PATH=${PATH}:/usr/local/bin
查询ODB版本,出现以下情况表示安装成功:
$ odb --version
ODB object-relational mapping (ORM) compiler for C++ 2.5.0-b.27
Copyright (c) 2009-2024 Code Synthesis.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ODB运行时库安装
dev@dev-host:~/workspace/odb-build/odb-gcc-N$ cd ..dev@dev-host:~/workspace/odb-build$ bpkg create -d libodb-gcc-N cc \ config.cxx=g++ \ config.cc.coptions=-O3 \ config.install.root=/usr/ \ config.install.sudo=sudo dev@dev-host:~/workspace/odb-build$ cd libodb-gcc-N dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg add https://pkg.cppget.org/1/beta dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg fetch dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg build libodb dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg build libodb-mysql
mysql和客户端开发包安装
sudo apt install mysql-server
sudo apt install -y libmysqlclient-dev
如果已经有mysql开发包就不用安装了,记得修改配置文件和用户密码等。
boost profile库安装
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg build libodb-boost
总体打包安装
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg install --all --recursive
总体卸载
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg uninstall --all --recursive
总体升级
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg fetch
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg status
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg uninstall --all --recursive
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg build --upgrade --recursive
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg install --all --recursive
头文件包含和编译时指明库
头文件:
#include <odb/database.hxx>
#include <odb/mysql/database.hxx>// 需要加上对应的hxx文件生成的odb.hxx文件
#include "student.hxx"
#include "student-odb.hxx"
连接库:
-lodb-mysql -lodb -lodb-boost
ODB常见操作介绍
类型映射
ODB中的类型(MySQL的数据类型)和C++中的数据类型存在一一的映射关系。
C++ Type | MySQL Type | Default NULL Semantics |
bool | TINYINT(1) | NOT NULL |
char | char (1) | NOT NULL |
signed char | TINYINT | NOT NULL |
unsigned char | TINYINT UNSIGNED | NOT NULL |
short | SMALLINT | NOT NULL |
unsigned short | SMALLINT UNSIGNED | NOT NULL |
int | INT | NOT NULL |
unsigned int | INT UNSIGNED | NOT NULL |
long | BIGINT | NOT NULL |
unsigned long | BIGINT UNSIGNED | NOT NULL |
long long | BIGINT | NOT NULL |
unsigned long long | BIGINT UNSIGNED | NOT NULL |
float | FLOAT | NOT NULL |
double | DOUBLE | NOT NULL |
std::string | TEST/VARCHAR(255) | NOT NULL |
char[N] | VARCHAR(N-1) | NOT NULL |
gregorian::date | DATE | NULL |
posix_time::ptime | DATETIME | NULL |
posix_time::time_duration | TIME | NULL |
ODB编程
ODB在数据元结构定义时,使用预处理器指令(#pragma)来提供元数据,这些元数据指示如何将C++类型映射到数据库模式。
这些#pragma指令是在C++代码中使用的,但不是C++语言的一部分,而是特定于ODB编译器的扩展。
#pragma db object | 用于声明某一个类是数据库对象,这个类最终将映射到数据库中的一张表。类的各项成员,最终就是表的column。 |
#pragma db table("table_name") | 指定该类映射到数据库中的表名。如果不指定,默认为类名。 |
#pragma db object table("table_name") | 前两个合二为一。 |
#pragma db id | 标明类中的某一个成员变量,作为数据库表中的主键。 |
#pragma db column("column_name") | 指定类成员变量映射到数据库表中的column名。如果不指定,默认为变量名。 |
#pragma db view | 用于声明某个类是一个数据库视图,而不是一个持久化表。 |
#pragma db session | 用于声明一个全局或成员变量是数据库会话。 |
#pragma db query("query") | 用于定义自定义的查询函数。 |
#pragma db index("index_name") | 指定成员变量应该被索引。 |
#pragma db default("default_value") | 指定成员变量的默认值。 |
#pragma db unique | 指定成员变量或一组变量具有唯一性约束。 |
#pragma db not_null | 指定成员变量不能为空。 |
#pragma db auto | 指定成员变量的值在插入时自增(比如主键)。 |
#pragma db transient | 指定成员变量不应该被持久化到数据库表中。 |
#pragma db type("type_name") | 指定成员变量的数据库类型。 |
#pragma db convert("convert") | 指定用于成员变量的自定义类型转换器。 |
#pragma db pool("pool_name") | 指定用于数据库连接的连接池。 |
#pragma db trigger("trigger_name") | 指定在插入、更新或删除操作时触发的触发器。 |
类与接口介绍
mysql连接池对象类
/usr/include/odb/mysql/connection-factory.hxx:
namespace odb{
namespace mysql{class LIBODB_MYSQL_EXPORT connection_pool_factory:public connection_factory{public:connection_pool_factory (std::size_t max_connections = 0,std::size_t min_connections = 0,bool ping = true)}
}
odb::mysql::connection_pool_factory
是 ODB 库中用于管理 MySQL 数据库连接池的类。它的主要作用是创建和管理一个数据库连接池,以提高数据库操作的性能和效率。
作用:
连接池管理 | 通过连接池管理多个数据库连接,避免频繁创建和销毁连接的开销。 |
性能优化 | 在高并发场景下,连接池可以显著提高数据库操作的性能。 |
资源复用 | 连接池中的连接可以被多个操作复用,减少资源浪费。 |
mysql客户端操作句柄类
/usr/include/odb/mysql/database.hxx:
namespace odb{
namespace mysql{class LIBODB_MYSQL_EXPORT database: public odb::database{database (const std::string& user,const std::string& passwd,const std::string& db,