MyBatis懒加载数据(大批量数据处理)

使用范例

Cursor约定使用Iterator去懒加载数据,以时间换空间,非常适合处理通常无法容纳在内存中的数百万个项目查询。如果在 resultMap 中使用集合,则必须使用 resultMap 的 id 列对游标 SQL 查询进行排序(resultOrdered="true")。

java 复制代码
//为了避免bug,手动管理一个session
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
    DDeviceShopIndexStatusMapper shopIndexStatusMapper = sqlSession.getMapper(DDeviceShopIndexStatusMapper.class);
    try (Cursor<DAlarmEventDTO> cursor = shopIndexStatusMapper.selectDevicesForShopClosed(commonProperties.getOpenShopStatus(), ABNORMAL.getCode())) {
        for (DAlarmEventDTO alarmEventDTO : cursor) {
            applicationContext.publishEvent(new DeviceShopClosedEvent(new Object(), alarmEventDTO));
        }
    } catch (IOException e) {
        log.error("shopStatusCheckJob cursor error:", e);
    }
}
============================
//方法定义
Cursor<DAlarmEventDTO> selectDevicesForShopClosed(@Param("shopStatus") List<String> shopStatus, @Param("status") Integer status);
============================
//xml写法与平常无异
<select id="selectDevicesForShopClosed" resultType="com.rome.device.monitor.admin.infrastructure.remote.dto.DAlarmEventDTO">
    select ddsb.device_key,
           ....
    from d_device_detail ddd
    left join d_device_shop_bind ddsb on ddd.device_key = ddsb.device_key
    ....
    where 
    ....
</select>
相关推荐
小bo波12 分钟前
Java Swing 可视化素数筛:动态演示 1~120 质数筛选【附完整源码】
java·算法·可视化·swing·素数
天若有情67340 分钟前
【C++趣味实战】仿写Burp代理逻辑!自定义可控迭代器:拦截Intercept/放行Forward/重放Repeater全实现
java·开发语言·c++
迷藏49442 分钟前
Python+DuckDB:轻量级BI流水线实战
java·开发语言·python·原型模式
磊 子1 小时前
C++function与bind绑定器讲解
java·jvm·c++
咋吃都不胖lyh1 小时前
短期记忆和长期记忆都存 MySQL
android·java·开发语言
浮游本尊1 小时前
前端vue转后端java学习路径
java·前端·vue.js
KWTXX1 小时前
vibe coding-提示词
java·前端·算法
Knight_AL2 小时前
深入理解 ForkJoinPool、parallelStream、CompletableFuture:从原理到生产最佳实践(含百万订单统计实战)
java
王五周八2 小时前
玩转 Spring AI Agent:基于 SpringBoot 集成 AI 工具与 Skills 能力实践
java·spring