简单事例
mapper
@Select("select distinct(phone),user_id from ${odpsTableName} where ${conditions} and ds=${ds}")
@ResultType(UserInfo.class)
@Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = Integer.MIN_VALUE)
void selectAutoList(@Param("conditions") String conditions, @Param("odpsTableName") String odpsTableName,@Param("ds") String ds, ResultHandler<UserInfo> resultHandler);
消费者:
List<UserInfo> list = new ArrayList<>();
mapper.selectAutoList(strategy.getConditions(), tableName,
ds,
context -> {
UserInfo user = context.getResultObject();
list.add(user);
}
});
配套设施:
/**
* 流式查询, 根据订单时间区间分页查询记录
*
* @param fromDate 起始时间, 包含
* @param toDate 截止时间, 不包含
*/
@Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = Integer.MIN_VALUE)
void streamSelect(@Param("fromDate") Date fromDate, @Param("toDate") Date toDate,
ResultHandler<OriginBillData> handler);
<select id="streamSelect" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from origin_bill_data
where order_date >= #{fromDate}
and order_date < #{toDate}
</select>
消费者:
List<OriginBillData> originBillDataList = new ArrayList<>(1000);
alipayOriginBillDataService.streamSelectByOrderDateRange(fromDate, toDate, resultContext -> {
originBillDataList.add(resultContext.getResultObject());
if (originBillDataList.size() >= 1000) {
originBillDataListConsumer.accept(originBillDataList);
originBillDataList.clear();
}
});
if (originBillDataList.size() > 0) {
originBillDataListConsumer.accept(originBillDataList);
originBillDataList.clear();
}