java翻页处理二种方法
1、while写法
Long id = null;
Integer limit = 500;
while (true) {
//获取数据
List<BtOrderModel> unSendScpOrders = btOrderMapper.selectUnSendScpOrders(id, limit);
if (CollectionUtils.isEmpty(unSendScpOrders)) {
log.info("XXX任务结束");
break;
}
for (BtOrderModel unSendScpOrder : unSendScpOrders) {
try {
//处理数据
doHandle(unSendScpOrder);
} catch (Exception e) {
comIssueLogService.add(e, "XXX任务失败 tradeId: " + unSendScpOrder.getTradeId() + " " + e.getMessage());
}
}
id = unSendScpOrders.get(unSendScpOrders.size() - 1).getId();
}
sql的写法
<select id="selectUnSendScpOrders" resultMap="BaseResultMap">
SELECT id
,trade_id
,seller_id
,modified
FROM bt_order
<where>
<if test="id != null">
AND id > #{id}
</if>
AND send_scp_flg = 0
</where>
ORDER BY id ASC
LIMIT ${limit}
</select>
2、do while写法
do {
//获取数据
List<BtOrderModel> unSendScpOrders = btOrderMapper.selectXXX(maxId, limit);
if (CollectionUtils.isEmpty(unSendScpOrders)) {
log.info("XXX任务结束");
return;
}
BtOrderModel infoModel = unSendScpOrders
.stream().skip(unSendScpOrders.size() - 1).findFirst().orElse(null);
maxId = Math.toIntExact(infoModel.getId());
for (BtOrderModel unSendScpOrder : unSendScpOrders) {
try {
//处理数据
doHandle(unSendScpOrder);
} catch (Exception e) {
comIssueLogService.add(e, "XXX任务失败 tradeId: " + unSendScpOrder.getTradeId() + " " + e.getMessage());
}
}
if (checkEnd) {
break;
}
} while (true);
sql的写法
<select id="selectXXX" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM bt_logistics_detail_info
<where>
process_refund_flg = #{processRefundFlg}
<if test="maxId != null">
AND `id` > #{maxId,jdbcType=BIGINT}
</if>
</where>
ORDER BY id ASC
limit #{limit}
</select>```