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>
相关推荐
o盟2 分钟前
maven本地仓库有 总是去私仓中下载
java·maven·intellij-idea
devpotato9 分钟前
Java 批量并发请求:从“能并发“到“结果按完成顺序可用“的三种写法与选型
java
苏生Susheng1 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
想要成为老金高手1 小时前
Kubernetes 调度器详解:从 nodeName 到污点容忍
java·容器·kubernetes
吴长建先生重名了1 小时前
ElasticSearch 检索系统性能优化实战:基准测试
java
西索斯coding1 小时前
doubao-seed-2.1-turbo 调用一直 401 怎么办?pro 版同样的 Key 却正常——5 分钟排查定位指南
java·服务器·数据库·ai
旧梦95271 小时前
Java SortedMap 接口详解:从入门到实战
java·开发语言
莫陌尛.1 小时前
Java_this构造方法
java·开发语言
2601_962297252 小时前
C# vs Java vs Python:YOLO工业部署性能对比实战
java·python·c·工业视觉·性能对比
计算机毕设定制辅导-无忧学长2 小时前
《基于SpringBoot的马术俱乐部管理系统》
java·spring boot·后端