ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BES-项目中PageHelper的使用

2019-09-20 22:04:38  阅读:414  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有