Mysql数据库映射, ccoong/web_server 的扩展
文件路径:./build/13535_mysqlorm.conf
//配置信息,示例:
"host": "主机","user": "用户名","password": "密码","port": "端口号","unix_socket": "连接方式","client_flag": "标志位","character":"字符集","read_timeout":"读取超时时间","write_timeout":"写入超时时间"
//多台服务器需换行,示例:
"host": "127.0.0.1","user": "root","password": "123456","port": "3306","unix_socket": "","client_flag": "0","character":"utf8mb4","read_timeout":"30","write_timeout":"60"
"host": "127.0.0.2","user": "root","password": "123456","port": "3306","unix_socket": "","client_flag": "0","character":"utf8mb4","read_timeout":"30","write_timeout":"60"
./build/13535.log
include/mysqlorm/mode/dbA1_test.hpp
会根据创建的mode文件,自动生成相应的数据库与数据表(懒加载,只在调用mode文件时才会自动创建)
名称定义:通过下划线分割数据库与数据表,并且大小写敏感,如: dbA1_test 会生成对应的数据库 db_a1 与数据表 test
int createTableF_(){
return createTable([this](auto *data){
data->string_("name")->comment_("用户名"); //创建一个字符串类型的字段,字段的名字为 name,注解为 用户名
data->int_("age")->nullable_()->comment_("年龄"); //同上,整型字段,允许值为null
data->dateAt_(); //生成 created_at 表示创建时间,与 created_at 表示修改时间,它们的值将在创建与修改的时候自动更改
});
}
第一个参数为字段名,第二个参数可指定显示长度(zerofill_()表示空位补零)
tinyint_("name") //很小的整数(1字节,-128〜127 | 0〜255)
smallint_("name") //小的整数(2字节,-32768〜32767 | 0〜65535)
mediumint_("name") //中等大小的整数(3字节,-8388608〜8388607 | 0〜16777215)
int_("name") //普通大小的整数(4字节,-2147483648〜2147483647 | 0〜4294967295)
bigint_("name") //大整数(8字节,-9223372036854775808〜9223372036854775807 | 0〜18446744073709551615)
示例:tinyint_("name",2)->zerofill_() //表示字段名称为name,并指定了固定显示长度为2(如果插入的数据是1,指定长度2,结果就是01,指定长度3结果就是001)
第一个参数为字段名,第二个参数可指定显示长度,第三个参数可指定显示小数位数
float_("name") //单精度浮点数(4字节,±131072(65536×2))
double_("name") //双精度浮点数(8字节)
decimal_("name") //定点型浮点数(不存在精度损失)
第一个参数为字段名,第二个参数可指定字符串长度,如:string_("name",10) 字段名称为name,字符串长度为10个
string_("name") //字符串型
text_("name") //文本类型
date_("name") //时间类型
dateAt_("name") //会增加两个字段 创建时间(created_at) 与 修改时间(created_at),它们的值将在创建与修改的时候自动更改
unsigned_(); //无符号的
unique_(); //唯一的
nullable_(); //允许值为null
default_("value"); //默认值
zerofill_(); //填充0固定长度:123=0000000123
comment_("words"); //注解
int insertF(const std::string value)
参数: value 要被插入的数据,值用逗号分隔、组用分号分隔、字符串需单引号包裹
返回值:成功返回0,失败返回-1
dbA1_test::obj().insertF("'小明',20,1"); //表示第一个字段的值为'小明',第二个字段为20,第三个字段为1(可以为null的字段如果没有内容也可以留空,如:dbA1_test::obj().insertF("'小明',,1"); 表示第一个字段的值为'小明',第二个字段为null,第三个字段为1)
dql *where(const std::string &v)
说明: <小于,>大于,=等于,<=小于等于,>=大于等于,!=不等于,&&表示与,|| 表示或
其它: where后面还可以拼接其它条件,如:where表示and,orWhere表示or,notWhere用于值为null的正确获取
返回值:dql指针
std::string data{}; //创建一个字符串存放数据
dbA1_test::obj().where("age=20")->get(data); //查询 age=20 的所有数据,存放到 ata 字符串
int update(const std::string &data)
参数: data 要修改的数据,用单引号包裹字符串,用冒号分隔键值对 如:(name:'小明')、用逗号分隔段 如:(age:21,sex:0)
返回值:成功返回0,失败返回-1
dbA1_test::obj().where("age>20")->update("age:21,sex:0");
int del()
返回值:成功返回0,失败返回-1
dql select(const std::string &key = "")
参数: key 只获取被指定的一个字段的内容(默认值"*"表示所有字段的内容)
返回值:dql指针
dql *selectArr(const std::vectorstd::string &key)
参数: key 只获取被指定的一组字段的内容
返回值:dql指针
dql *find(const unsigned long &id = 1)
参数: id
返回值:dql指针
dql *order(const std::string &key, const std::string &type = "ASC")
参数key:用于排序的字段名(如:id)
参数type:ASC表示升序,DESC为降序
返回值:dql指针
dql *between(const std::string &key, const unsigned long &start_value, const unsigned long &end_value)
参数key:字段名(以该字段进行查找)
参数start_value:开始值
参数end_value:结束值
说明: 查询指定key下的内容,start_value到end_value之间的数据,包含边界值
返回值:dql指针
dql *isNull(const std::string &key)
参数key:字段名(以该字段进行查找)
说明: 查询指定key下的内容为null的数据
返回值:dql指针
dql *isNotNull(const std::string &key)
参数key:字段名(以该字段进行查找)
说明: 查询指定key下的内容不为null的数据
返回值:dql指针
dql *like(const std::string &key, const std::string &value)
说明: %(匹配任意多个字符) _(匹配单一字符) (转义)
int show()
int showIndex()
int explain()
int get(std::string &result)
参数: result 查询到的结果
上一页:
int limitLast(std::string &result,const unsigned &start_id,const unsigned &length = 100)
参数result:查询到的结果
参数start_id:小于该id的数据
参数length:每页显示多少条数据,默认100条
返回值:失败返回-1,成功返回0
std::string str_data{};
dbA1_test::obj().select("id")->limitLast(str_data,100);
std::cout<<str_data<<std::endl;
下一页:
int limitNext(std::string &result,const unsigned &end_id,const unsigned &length = 100)
参数result:查询到的结果
参数end_id:大于该id的数据
参数length:每页显示多少条数据,默认100条
返回值:失败返回-1,成功返回0
std::string str_data{};
dbA1_test::obj().select("id")->limitNext(str_data,1);
std::cout<<str_data<<std::endl;
特定页:
int limitSpecific(std::string &result,const unsigned &page = 1,const unsigned &length = 100)
参数result:查询到的结果
参数page:要查看第几页
参数length:每页显示多少条数据,默认100条
返回值:失败返回-1,成功返回0
std::string str_data{};
dbA1_test::obj().select("id")->limitSpecific(str_data,1);
std::cout<<str_data<<std::endl;
dbA1_test::obj().insertF("'小明',10");
说明:插入,name字段的值为小明(字符串要用单引号包裹),age字段的值为10,第三个字段sex没有值将默认为null
dbA1_test::obj().insertF("'小强',10,1;'大强',20,1");
说明:用分号(;)区分组,这里是两组数据分别为:小强年龄10性别1 与 大强年龄20性别为1
dbA1_test::obj().find(1)->show();
说明:寻找id等于1的数据,show()表示打印出来
dbA1_test::obj().where("age>10 && sex=1");
说明:where表示查找(年龄大于10 并且 性别等于1)的数据
dbA1_test::obj().where("age>10")->where("sex=1");
说明:同上
dbA1_test::obj().where("age>10 || sex=1");
说明:查找(年龄大于10 或者 性别等于1)的数据
dbA1_test::obj().where("age>10")->orWhere("sex=1");
说明:同上
dbA1_test::obj().select("a1")->where("age>10");
说明:查找(年龄大于10)的数据,只要a1字段的内容
dbA1_test::obj().selectArr({"a1", "a2"})->where("age>10");
说明:查找(年龄大于10)的数据,只要a1与a2字段的内容
std::string data{};
dbA1_test::obj().where("age=10")->get(data);说明:data为获取到的数据(json字符串类型,可以直接返回给前端)
dbA1_test::obj().where("age>10")->update("name:'大明',age:20");
说明:查找(年龄大于10)的数据,update表示更改(名称改为大明,年龄改成20)
dbA1_test::obj().where("age=21")->del();
说明:查找where(年龄age等于21)的数据,删除del()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。