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>
相关推荐
JAVA面经实录9174 分钟前
完整版JVM 深度学习体系(二)
java·jvm
.ZGR.6 分钟前
线程池相关知识及并发统计案例实现
java·开发语言
Mr_pyx8 分钟前
面试题记录
jvm·数据结构·算法·spring·mybatis
慕言手记20 分钟前
IDEA 插件常用-2026版
java·ide·spring boot·intellij-idea·idea·intellij idea
颖火虫盟主22 分钟前
Hello World MCP Server 实现总结
java·前端·python
iiiiyu40 分钟前
⾯向对象和集合编程题
java·大数据·开发语言·数据结构·编程语言
超級二蓋茨40 分钟前
asp.net core中JwtBearerEvents中几个事件的生命周期
java·服务器·asp.net
Full Stack Developme42 分钟前
Spring-web 解析
java·前端·spring
devilnumber1 小时前
如何在java的Lambda中安全地修改外部变量?
java·安全·lambda
大得3691 小时前
langchain使用
java·python·langchain