SpringBoot调用服务返回分页数据
场景描述
通过调用服务获取数据,可以获取其它应用的数据。对于数据量大的数据,建议采用分页获取数据
实现思路
后端服务增加2个参数page和size用于获取分页数据,前端页面使用serviceData服务数据组件,调用后端服务,服务返回的数据自动装入serviceData组件。
实现步骤
1. 定义服务返回分页数据
切换到“服务”设计区,添加服务请求,在"请求参数"中添加page和size参数,"数据类型"都是整数,如下图所示
在“请求返回”中选中“集合”和”分页“、“数据类型”选择动态数据集或静态数据集,如下图所示
如果返回的是其它应用的数据,在本应用中添加静态数据集(静态数据集编译后生成vo),请求返回选择这个静态数据集
2、添加数据方法或自定义Mapper
在“服务”设计区,点击数据方法维护按钮,如下图所示,给数据集添加数据方法,即生成Mapper
在这里添加、修改和删除数据方法
选中“全部字段”和“结果分页”,则返回Page对象
保存后,系统生成gen-java/main/mapper/xxxMapper.java。这里生成的是只查询一个数据集的方法,如果需要查询多个数据集,在java/main目录下创建mapper目录,在mapper目录下创建Mapper.java,写sql查询多个数据集
3. 在Service中调用Mapper方法
在服务请求对应的java方法中调用Mapper中定义的方法,这里需要使用分页工具类提供的两个方法
- 转mybatis分页请求:将PageRequest对象转为新创建的Page对象,作为Mapper方法的参数
- 转换mybatis分页结果:将Mapper返回的Page对象,转换为系统的Page对象,作为服务的返回结果
获取分页数据的过程如下
- controller用传入的page和size参数创建PageRequest对象
- 调用Mapper方法获得Page对象,参数使用“转mybatis分页请求”方法,传入PageRequest获得
- 调用“转换mybatis分页结果”,获得系统Page对象
画代码实现
写代码实现
import org.springframework.beans.factory.annotation.Autowired;
import com.justep.cloud.data.*;
import main.mapper.*;
...
@Autowired
private OrdermMapper ordermMapper;
public Page<Orderm> getPage(PageRequest pageRequest) throws Exception {
com.baomidou.mybatisplus.extension.plugins.pagination.Page < Orderm > mPage = ordermMapper.queryPagedEntityByFidIsNotNull(PageUtil.toMybatisPageRequest(pageRequest));
Page jPage = PageUtil.fromMybatisPage(mPage);
return jPage;
}
4. 使用serviceData获取分页数据
切换到“页面”设计区,将服务组件添加到页面上,点击“增加结果数据集”,添加serviceData组件,如下图所示
在数据集上可以设置分页数据大小
在页面上添加数据显示组件(例如表格),“绑定数据集”属性选择serviceData组件
添加分页组件,“绑定数据集”属性选择serviceData组件
通过点击分页栏显示指定页的数据,运行效果如下图所示
显示第一页数据,page传的是1,size传的是serviceData设置的分页数据大小
显示第二页数据,page传的是2
serviceData使用说明
- 使用serviceData时,不需要发送服务请求,而是通过调用serviceData的刷新方法refreshData获取数据
- serviceData是通过调用服务获取数据的,不支持restData的过滤方法和过滤组件
- 本例服务请求size参数使用了serviceData中设置的分页数据大小,也可以在后端服务请求定义中设置参数默认值