标签:dto 项目 List results organizationDTO new BES PageHelper PageInfo
项目中为了减少数据传输并在前段实现分页功能,使用了PageHelper。用PageInfo来返回值。
以Organization表操作为例。
Controller层
controller子项目中的application.yml中对pagehelper的配置:
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
Controller层仅仅是用PageInfo<VO>重新包装了service层返回的数据。
@PostMapping(value = "/queryByCondition")
public CommonResponse<PageInfo<OrganizationDataListVO>> queryByCondition(@RequestBody CommonRequest<OrganizationQueryConditionVO> commonRequest){
CommonRequestUtils.checkCommonRequest(commonRequest);
OrganizationDTO dto = new OrganizationDTO();
OrganizationQueryConditionVO organizationQueryConditionVO = commonRequest.getBody();
BeanUtils.copyProperties(organizationQueryConditionVO,dto);
try {
PageInfo<OrganizationDTO> dtoPageInfo = organizationService.queryByCondition(dto);
List<OrganizationDTO> dtoList = dtoPageInfo.getList();
List<OrganizationDataListVO> vos = ConversionUtils.simpleListConversion(dtoList, OrganizationDataListVO.class);
PageInfo<OrganizationDataListVO> voPageInfo = new PageInfo<>();
BeanUtils.copyProperties(dtoPageInfo, voPageInfo);
voPageInfo.setList(vos);
return CommonResponseUtils.makeSuccessCommonResponse(voPageInfo, "0", null, null, null);
} catch (ServiceException exception) {
throw new BusinessException(exception);
} catch (IllegalAccessException | InstantiationException e) {
throw new BusinessException(SystemExceptionEnum.SYSTEM_ERROR);
}
}
Service层
这里使用了通用mapper。service层是关键
步骤:
1. 初始化PageHelper:传入参数pageNum(第几页)、pageSize(每页有几条数据)
PageHelper.startPage(organizationDTO.getPageNum(), organizationDTO.getPageSize());
2. 调用dao层的方法,从数据库中获取数据,存在一个List中
List<Organization> results = organizationDao.selectByExample(condition);
3. 用PageInfo包装数据,PageInfo中将会保存total(总条数)、pages(总页数)等关键数据。
PageInfo<Organization> organizationPageInfo = new PageInfo<Organization>(results);
(PageInfo的成员变量说明:https://blog.csdn.net/weixin_41996974/article/details/81099693)
在三个步骤中间不要再有其他对于数据的操作,否则取回的数据或者PageInfo中的分页数据可能会出现错误!
完整的service层代码:
public PageInfo<OrganizationDTO> queryByCondition(OrganizationDTO organizationDTO) throws ServiceException {
Condition condition = new Condition(Organization.class);
Example.Criteria criteria = condition.createCriteria();
if (!StringUtils.isEmpty(organizationDTO.getName())) {
criteria.andLike("name", organizationDTO.getName() + "%");
}
condition.setOrderByClause("updated_time DESC");
PageHelper.startPage(organizationDTO.getPageNum(), organizationDTO.getPageSize());
List<Organization> results = organizationDao.selectByExample(condition);
PageInfo<Organization> organizationPageInfo = new PageInfo<Organization>(results);
List<OrganizationDTO> dtos = null;
OrganizationDTO dto = null;
dtos = new ArrayList<OrganizationDTO>(results.size());
for (Organization result : results) {
dto = new OrganizationDTO();
BeanUtils.copyProperties(result, dto);
dtos.add(dto);
}
PageInfo<OrganizationDTO> organizationDtoPageInfo = new PageInfo<OrganizationDTO>();
BeanUtils.copyProperties(organizationPageInfo, organizationDtoPageInfo);
organizationDtoPageInfo.setList(dtos);
return organizationDtoPageInfo;
}
Dao层
继承了通用mapper的接口。
@Repository
public interface OrganizationDao extends Mapper<Organization>, MySqlMapper<Organization> {
}
标签:dto,项目,List,results,organizationDTO,new,BES,PageHelper,PageInfo 来源: https://blog.csdn.net/qq_37908348/article/details/100989230
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。