springboot + mybatis 流式查询

目录

一、controller

二、service

三、mapper

四、xml


使用场景:大量数据查询,为了不占用过多内存,查询出来的数据快速处理。提高查询效率

一、controller

@ApiOperation(value = "测试流式查询")
@GetMapping("/streamFind")
public Message streamFind() {
    userService.streamFind();
   return sendSuccessMessage();
}

二、service

注意点:

  1. 需要加@Transactional事务,保持长链接        
  2. 用Cursor(游标)接收,然后遍历这个cursor。mybatis就会按照你在userMapper里设置的fetchSize 大小,每次去从数据库拉取数据。
    @Override
    @Transactional
    public List<UserEntity> streamFind() {
        Cursor<UserEntity> cursor = userMapper.streamFind();
        for (UserEntityentity : cursor) {
            System.out.println("======" + entity.getId());
            System.out.println("业务逻辑");
        }
        return null;
    }

三、mapper

Cursor<RobotActionEntity> streamFind();

四、xml

注意点:

  1. fetchSize :每次从数据库取多少条数据回内存。
  2. resultSetType:需要设置为 FORWARD_ONLY, 意味着,查询只会单向向前读取数据。
<select id="streamFind" fetchSize="3" resultMap="ResultMap" resultSetType="FORWARD_ONLY">
		select *
		from robot_action
</select>

测试跑数:读取200万条数据,每次fetchSize读取1000条,batch总用时50s左右执行完。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值