-
Notifications
You must be signed in to change notification settings - Fork 60
paozhu 框架ORM入门
本编文章介绍怎么使用orm
paozhu 特色是从数据库动态生成 orm 文件,这样不需要c++最新特性,实现优雅访问数据库。
修改mysql数据表,可以增删字段,或改类型,然后重新生成c++代码,不需要写代码。
安装好mysql数据库
进入mysql数据库控制台,
如mysql -u root -p
我们按照conf/orm.conf 文件配置数据库
测试数据库文件在conf目录,有几个sql文件
创建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命令行
在项目根目录
./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文件生成工作
到controller目录
创建
testmysql.cpp
可以参考 框架 hello world文章
#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模块
在项目目录build里面 执行
cmake ..
后再重新
make
完成后
cd ..
退回 根目录
sudo ./bin/paozhu
没有问题可以
看到结果
hello world! testmysqlconnect
sql result
sql:SELECT * FROM user WHERE name='admin' limit 1
found:admin