为了账号安全,请及时绑定邮箱和手机立即绑定

2个服务的数据,在一个table表格中分页显示(只讲思路)

标签:
Java

现在有这么场景:服务A要分页显示一些数据,而这些数据是先显示服务A(它本身的),如果数据不够,就再显示服务B的。

例如:服务A有11条数据,服务B有23条数据,这样总条数是34条;前台每页显示10条,共4页。具体是:

第1页,只显示服务A的前10条;

第2页,显示服务A的1条,显示服务B的9条(共10条);

第3页,只显示服务B的第10-19条(共10条);

第4页,只显示服务B的第20-23条(共4条)


现在开始进行代码流程梳理:

第1页,前台传过来pageNum:1 和pageSize:10,服务A先查自己的,取10条,判断结果集是否小于10条,发现等于10条,那就说明服务A的数据已经够了,不用再取服务B的数据了,但要获取服务B的记录数,所以还是要调用服务B,只是参数是pageNum:1 和pageSize:0,这样服务B会返回它自己的记录数,这样要显示的数据和总记录数就都有了;

第2页,前台传过来pageNum:2 和pageSize:10,服务A先查自己的,取10条,判断结果集是否小于10条,发现只查出1条,那还差10-1=9条,那就要调用服务B取前9条,所以参数是pageNum:1 和pageSize:9,这样服务B会返回它自己的记录数,服务A的1条和服务B的9条合并成10条,这样要显示的数据和总记录数就都有了;

第3页:前台传过来pageNum:3 和pageSize:10,服务A先查自己的,取10条,判断结果集是否小于10条,发现只查出0条,那还差10-0=10条,那就要调用服务B取第10-19条,如果传参是pageNum:2和pageSize:10,的话,服务B就是取11-20条,这样第10条就被跳过了,所以我这时传参数为:pageNum:1 和pageSize:3*10-11=19,这样取到了19条,但只取第10-19条,所以需要把前((3-1)*10-11)=9删掉,这样就剩服务B的10-19条了,这样要显示的数据和总记录数就都有了;

第4页:前台传过来pageNum:4 和pageSize:10,服务A先查自己的,取10条,判断结果集是否小于10条,发现只查出0条,那还差10-0=10条,所以传参数为:pageNum:1 和pageSize:4*10-11=29,这样取到了23条,但只取第20-23条,所以需要把前((4-1)*10-11)=19删掉,这样就剩服务B的20-23条了,这样要显示的数据和总记录数就都有了;


总结:

前台传过来pageNum:N 和pageSize:10,

(1)服务A先查自己的,查出结果,

(2)再调用服务B,传参数pageNum:1 和pageSize:N*10-服务B的总记录数(如果为负,则取值为0),取到服务B的数据要进行裁剪,裁剪掉前(N-1)*10-服务B的总记录数(如果为负,则取值为0,或者不裁剪),

(3)把服务A和服务B的结果集合并,把服务A和服务B的总记录数相加,

这样就OK了。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
13
获赞与收藏
7

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消