Skip to content

paozhu 框架ORM入门

Huang ziquan edited this page Oct 27, 2023 · 14 revisions

paozhu 框架ORM入门

本编文章介绍怎么使用orm

paozhu 特色是从数据库动态生成 orm 文件,这样不需要c++最新特性,实现优雅访问数据库。
修改mysql数据表,可以增删字段,或改类型,然后重新生成c++代码,不需要写代码。

1、创建测试数据库

安装好mysql数据库
进入mysql数据库控制台,
如mysql -u root -p

我们按照conf/orm.conf 文件配置数据库

测试数据库文件在conf目录,有几个sql文件

2、先介绍cppcms数据库配置

创建cppcms数据库utf8mb4_general_ci 数据字符集

建议所有文件都用utf8.

mysql> show databases;
如果有就数据库cppcms可以删除.

mysql> DROP DATABASE IF EXISTS cppcms;

mysql>create database cppcms default character set utf8mb4 collate utf8mb4_general_ci;

查看数据库是不是创建了 mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| cppcms             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

mysql> use cppcms; 使用数据库

mysql> source /home/hzq/paozhu-1.0.1/conf/cppcms.sql;

导入测试样例,然后退出mysql命令行

3、产生orm文件

在项目根目录

./bin/paozhu_cli

这是一个终端程序

./bin/paozhu_cli  model | view | viewtocpp | control   

 🎉 Welcome to use cli to manage your MVC files。
(m)model (v)view (f)viewtocpp or (c)control,x or q to exit[input m|v|f|c|]:

显示这个

可以输入四种命令,m v f c

下载我们用model 所有输入m

(m)model (v)view (f)viewtocpp or (c)control,x or q to exit[input m|v|f|c|]:m

 🍄 current path: /home/hzq/paozhu-1.0.1
 
 1 aaa
 
 2 aaa
 
 3 krma
 
 4 krma
 
 5 cppcms
 
 6 cppcms
 
select db index:

让我们选择数据库

选择5就是刚才导入的,其他还没导入。为什么有两个相同,因为分读写链接,第一个默认是写(主库),第二个是读。

select db index:5

create cppcms table to models 🚀 

show tables:

01 article    
      
02 user        
     
Select number to update orm basefile,a to update all, x to quit.

input table index number to update, e(x)it (r)eload dbconfig (a)ll :

是否生成所有orm文件

第一次选择a 生成所有

以后可以选择 数字 1 或2

input table index number to update, e(x)it (r)eload dbconfig (a)ll :a

create article table to models 🚗


 create table metainfo file: orm/cms/include/articlebase.h
 
create user table to models 🚗


 create table metainfo file: orm/cms/include/userbase.h
 
input table index number to update, e(x)it (r)eload dbconfig (a)ll :x

两次X退出

ls models/

cms  include  orm.h

ls models/cms/

Article.cpp  include  User.cpp

ls models/cms/include/

Article.h  User.h

orm.h是总文件,我们使用使用只要包含这个就可以了

orm目录,是orm基础文件。

就是mysql数据表的配置文件。

现在完成了orm文件生成工作

4、测试orm

到controller目录

创建

testmysql.cpp

可以参考 框架 hello world文章

testmysql.cpp

#include "orm.h"
#include <chrono>
#include <thread>
#include "func.h"
#include "httppeer.h"
#include "testmysql.h"

namespace http
{
   //@urlpath(null,testmysql)
   std::string testmysqlconnect(std::shared_ptr<httppeer> peer)
   {
      httppeer &client = peer->getpeer();
      client << "hello world!  testmysqlconnect ";
      auto users = orm::cms::User();

      users.where("name","admin").limit(1).fetch();
      try
      {
         client<<"<p>sql result</p>";
         // view orm create sql
         client<<"<p>sql:"<<users.sqlstring<<"</p>";
         if (users.getUserid() > 0)
         {
            // save session,other page get  int userid= client.session["userid"].to_int();
            client.session["aaa"] = users.getUserid();
            client.save_session();
            client<<"<p>found:"<<users.data.name<<"</p>";
            return "";
         }
         else
         {
            return "";
         }
      }
      catch (std::exception &e)
      {
         client << "<p>" << e.what() << "</p>";
         return "";
      }
      return "";
   }
  
}

auto users = orm::cms::User();

users.where("name","admin").limit(1).fetch();

orm 是命名空间,cms是数据库标签,在conf/orm.conf 里面标注,用来隔离orm文件,这样数据库和另一个数据表名相同不会冲突。

User是表名,第一个字母大写,sql操作是链式操作。 最后拼装sql。有一个字符安全过滤函数。

sqlstring 是拼装好的sql语句,然后发给mysql链接池,选择一个链接,然后返回数据,第一行记录会在 users.data;

完整记录在users.record 这是一个vector数组。 users.data.userid 就是字段访问方式。所以建数据表名和字段有要求,字段类型有8到9种,详细看orm模块

5、编译

在项目目录build里面 执行

cmake ..

后再重新

make

完成后

cd ..

退回 根目录

sudo ./bin/paozhu

没有问题可以

http://localhost/testmysql

看到结果

hello world! testmysqlconnect

sql result

sql:SELECT * FROM user WHERE name='admin' limit 1

found:admin