# orm_mysql **Repository Path**: little_m/orm_mysql ## Basic Information - **Project Name**: orm_mysql - **Description**: c++实现的orm操作mysql - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-25 - **Last Updated**: 2021-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # orm_mysql #### 介绍 c++实现的orm操作mysql #### 开发环境 - 已经根据网上教程配置好了Mac下的VSCode的C++环境 - 已经根据网上教程配置好了Mac下的VSCode的C++调试环境 - 已经根据网上教程配置好了CMake环境 - 已经根据网上教程配置好MySQL开发环境 #### 软件架构 软件架构说明 #### 安装教程 1. `mkdir build` 2. `cmake ../` 3. `make` 4. `../bin/ORM` 注意: ​ `#include "/usr/local/Cellar/mysql-client/8.0.25/include/mysql/mysql.h"`改为自己电脑mysql.h位置 #### 使用说明 --- ##### 第一种实现:静态反射 1. 实体类创建 ```c++ struct MyClass { int id; double score; std::string name; // Inject ORM into this Class :-) ORMAP(MyClass, id, name, score); }; ``` 2. 数据库连接 ```c++ ORMapper mapper("127.0.0.1", "root", "123456", "test", 3306); ``` 3. 数据库表创建 ```c++ mapper.CreateTbl(MyClass{}); ``` 4. 数据插入 ```c++ std::vector initObjs = { {0, 0.2, "John"}, {1, 0.4, "Jack"}, {2, 0.6, "Jess"}}; // Insert Values into the table for (const auto obj : initObjs) mapper.Insert(obj); ``` 5. 数据查询 ```c++ std::cout << mapper.Query(MyClass{}).Count() << std::endl; auto result1 = mapper.Query(MyClass{}).ToVector(); for (int i = 50; i < 100; i++) dataToSeed.emplace_back(MyClass{i, i * 0.2, "July"}); mapper.InsertRange(dataToSeed); MyClass helper; auto result2 = mapper.Query(helper) .Where(Field(helper.name) == "July" && (Field(helper.id) <= 90 && Field(helper.id) >= 60)) .ToVector(); std::cout << result2.size() << std::endl; ``` 6. 数据更新 ```c++ // Update Entry by KEY (id) initObjs[1].score = 1.0; mapper.Update(initObjs[1]); ``` 7. 数据删除 ```c++ // Delete Entry by KEY (id) mapper.Delete(initObjs[2]); ``` 8. 事务 ```c++ mapper.Transaction([&]() { mapper.Delete(initObjs[0]); mapper.Insert(MyClass{4, 0, "abc"}); }); ``` 9. 数据库表删除 ```c++ mapper.DropTbl(MyClass{}); ``` --- ##### 第二种实现动态反射 ​ 待完成 #### 参考资料 1. [如何设计一个简单的 C++ ORM](https://bot-man-jl.github.io/articles/?post=2016/How-to-Design-a-Naive-Cpp-ORM)