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>
相关推荐
我材不敲代码2 分钟前
Python 函数核心:位置参数与关键字参数详解
java·前端·python
qq_3331209734 分钟前
C++高并发内存池的整体设计和实现思路_C 语言
java·c语言·c++
mh_f37 分钟前
33.批量通过GET链接下载图片到指定文件夹下
java
金銀銅鐵39 分钟前
[Java] 如何理解 class 文件中方法的 access flags?
java·后端
智研数智工坊39 分钟前
SpringBoot4.0.6 + Security7.x + JWT 最新完整实战|无状态权限认证、统一异常处理、可直接落地
java·spring boot·spring security·jwt·权限认证
DIY源码阁42 分钟前
JavaSwing宿舍管理系统 - MySQL版
java·数据库·mysql·eclipse
Han_han91943 分钟前
递归相关题目:
java
二王一个今1 小时前
springboot security 权限控制---循环依赖问题
mybatis
kTR2hD1qb1 小时前
Claude Code Skill的介绍与使用
java·前端·数据库·人工智能
汤米粥1 小时前
python学习——核心语法三
java·python·学习