2024年6月22日17:14:12
req->getJsonObject()获取json数据的时候,如果没有提前判断
if (req->getJsonObject() == nullptr){throw std::invalid_argument("参数json不能为空");}auto jsonPtr = req->getJsonObject();
官方文档:https://github.com/drogonframework/drogon/wiki/CHN-08-3-%E6%95%B0%E6%8D%AE%E5%BA%93-ORM#mapper%E7%9A%84%E9%93%BE%E5%BC%8F%E6%8E%A5%E5%8F%A3
Mapper的链式接口
有些常见的sql约束,比如limit,offset等等,Mapper类模板也提供了支持,以链式接口的形式提供,意味着用户可以把多个约束串起来写。执行完任何一个接口,这些约束会被清空,也就是说,这些约束是在一次操作中有效的,比如:
Mapper<Users> mp(dbClientPtr);
auto users = mp.orderBy(Users::Cols::_join_time).limit(25).offset(0).findAll();
注意这里的limit offset是sql的原意,不是我们常用的封装过的orm,所以需要自己去维护一下offset
这段程序是从users表中选择用户列表,每页25行的第一页
。
Json::Value ret;ret["code"] = SUCCESS;ret["msg"] = SUCCESS_MSG;try{if (req->getJsonObject() == nullptr){throw std::invalid_argument("参数json不能为空");}auto jsonPtr = req->getJsonObject();// 转换指针auto pJson = *jsonPtr;LOG_DEBUG << pJson.toStyledString();// 获取对应的参数std::string page = pJson.get("page", 1).asString();std::string pageSize = pJson.get("pageSize", 10).asString();auto offset = (std::stoi(page) - 1) * std::stoi(pageSize);auto clientPtr = drogon::app().getDbClient();Mapper<Admin> mp(clientPtr);LOG_DEBUG << std::stoi(pageSize);LOG_DEBUG << std::stoi(page);std::vector<Admin> admin_list = mp.orderBy(Admin::Cols::_id).limit(std::stoi(pageSize)).offset(offset).findAll();auto count = admin_list.size();auto list = admin_list;Json::Value data;data["count"] = count;Json::Value json_list;if (count > 0){for (auto admin : admin_list){json_list.append(admin.toJson());}}data["list"] = json_list;ret["data"] = data;auto resp = HttpResponse::newHttpJsonResponse(ret);resp->setStatusCode(k200OK);callback(resp);}catch (std::exception &e){ret["code"] = FAIL;LOG_ERROR << e.what();ret["msg"] = e.what();auto resp = HttpResponse::newHttpJsonResponse(ret);resp->setStatusCode(k200OK);callback(resp);}
链式接口基本可以望文生义,这里不再一一赘述,请参考Mapper.h头文件。