本文主要是介绍【手记】mybatis流式查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简单事例
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_datawhere 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();}
这篇关于【手记】mybatis流式查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!