03 PageDTO解读
[TOC]
解读说明
PageDTO是对DTO的拓展,用于生成一页包含多行相同DTO的DTO对象。其中T表示一页中相同的一行DTO。
注意,由于PageDTO不会在返回前将内部DTO再进行Wrapper
序列化,因此在创建的时候每一行DTO都是以DTO::Wrapper
的类型创建的。并且放入数据也是放入的Wrapper,而非直接DTO。
使用方法
下面的继承类本质上就是进行了重命名,因此可以直接用using SamplePageDTO = PageDTO<SampleDTO::Wrapper>;
来代替继承语法。
#include OATPP_CODEGEN_BEGIN(DTO) class SampleDTO : public oatpp::DTO{ DTO_INIT (SampleDTO, DTO); DTO_FIELD (UInt64, id); DTO_FIELD_INFO (id) { info->description = ZH_WORDS_GETTER ("sample.field.id" ); } DTO_FIELD (String, name); DTO_FIELD_INFO (name) { info->description = ZH_WORDS_GETTER ("sample.field.name" ); } DTO_FIELD (Int32, age); DTO_FIELD_INFO (age) { info->description = ZH_WORDS_GETTER ("sample.field.age" ); } DTO_FIELD (String, sex); DTO_FIELD_INFO (sex) { info->description = ZH_WORDS_GETTER ("sample.field.sex" ); } }; class SamplePageDTO : public PageDTO<SampleDTO::Wrapper> { DTO_INIT (SamplePageDTO, PageDTO<SampleDTO::Wrapper>); }; #include OATPP_CODEGEN_END(DTO) #endif
类名:PageDTO<T>
字段
pageIndex
类型: UInt64
默认值: 1
必需: 是
描述: 当前页码
pageSize
类型: UInt64
默认值: 5
必需: 是
描述: 每页显示最大数据条数
total
类型: Int64
默认值: 9
必需: 是
描述: 数据的总条数
pages
类型: Int64
默认值: 2
必需: 是
描述: 数据的总页数
rows
类型: List<T>
默认值: 空列表
必需: 否
描述: 当前页数据列表
构造函数
PageDTO()
描述:初始化一个空的PageDTO
对象。
参数:无
返回值:无
initAll方法
void initAll(UInt64 pageIndex, UInt64 pageSize, Int64 total, Int64 pages, List rows)
描述:初始化所有字段的值。
参数:
pageIndex
(UInt64): 当前页码。
pageSize
(UInt64): 每页显示最大数据条数。
total
(Int64): 数据的总条数。
pages
(Int64): 数据的总页数。
rows
(List): 当前页数据列表。
返回值:无
calcPages方法
void calcPages()
描述:根据总条数和每页显示条数计算总页数。
参数:无
返回值:无
addData方法
void addData(T one)
描述:向当前页数据列表中添加一条数据。
参数:
返回值:无
文件资料(PageDTO声明)
下面资料的主要注意点在于row变量,也就是List<T>
。
#pragma once #ifndef _PAGE_DTO_ #define _PAGE_DTO_ #include "oatpp/core/macro/codegen.hpp" #include "oatpp/core/Types.hpp" #include OATPP_CODEGEN_BEGIN(DTO) template <class T >class PageDTO : public oatpp::DTO{ DTO_INIT (PageDTO, DTO); DTO_FIELD (UInt64, pageIndex) = 1 ; DTO_FIELD_INFO (pageIndex) { info->required = true ; #ifndef LINUX info->description = u8"当前页码" ; #else info->description = "page index" ; #endif } DTO_FIELD (UInt64, pageSize) = 5 ; DTO_FIELD_INFO (pageSize) { info->required = true ; #ifndef LINUX info->description = u8"每页数据条数" ; #else info->description = "page size" ; #endif } DTO_FIELD (Int64, total) = 9 ; DTO_FIELD_INFO (total) { info->required = true ; #ifndef LINUX info->description = u8"数据的总条数" ; #else info->description = "total" ; #endif } DTO_FIELD (Int64, pages) = 2 ; DTO_FIELD_INFO (pages) { info->required = true ; #ifndef LINUX info->description = u8"数据的总页数" ; #else info->description = "pages" ; #endif } DTO_FIELD (List<T>, rows) = {}; DTO_FIELD_INFO (rows) { #ifndef LINUX info->description = u8"当前页数据列表" ; #else info->description = "page data list" ; #endif } public : PageDTO () { this ->total = v_int64 (0 ); this ->pages = v_int64 (0 ); } void initAll (UInt64 pageIndex, UInt64 pageSize, Int64 total, Int64 pages, List<T> rows) { this ->pageIndex = pageIndex; this ->pageSize = pageSize; this ->total = total; this ->pages = pages; this ->rows = rows; } void calcPages () { this ->pages = total.getValue (0 ) / pageSize.getValue (1 ); this ->pages = total.getValue (0 ) % pageSize.getValue (1 ) == 0 ? this ->pages.getValue (0 ) : this ->pages.getValue (0 ) + 1 ; } void addData (T one) { this ->rows->push_back (one); } }; #include OATPP_CODEGEN_END(DTO) #endif