mybatis的流式查询

1:第一种:xml配置

    <select id="selectFetchSize" fetchSize="100" resultSetType="FORWARD_ONLY" resultType="com.example.poi.entity.EntityDemo">
        select * from entity_demo
    select>

1-2:第二种:Mapper类使用注解配置(注意设置必须没有返回值)

@Select("select * from entity_demo t ${ew.customSqlSegment}")
 @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 100)
 @ResultType(entity_demo.class)
 void selectFetchSize(@Param(Constants.WRAPPER) QueryWrapper<entity_demo> wrapper, ResultHandler<entity_demo> handler);

2:EntityDemoMapper(注意设置必须没有返回值)

void selectFetchSize(@Param(Constants.WRAPPER) QueryWrapper<EntityDemo> wrapper, ResultHandler<EntityDemo> handler);

3:EntityDemoServiceImpl

    @Override
    public void streamGain() {
        QueryWrapper<EntityDemo> wrapper = new QueryWrapper<EntityDemo>();
        entityDemoMapper.selectFetchSize(wrapper, resultContext -> {
            EntityDemo orgData = resultContext.getResultObject();
            /**循环调用实现业务*/
            System.out.println(Thread.currentThread().getName()+"====================");
        });
    }

4:IEntityDemoService

    /**
     * 流方式获取数据
     * @return
     */
    List<EntityDemo> getList();

流式查询,对于一般查询是一次性把所有数据查询出来放在集合中,这时候GC回收释放不了这一部分内存,就会是堆内存用尽导致程序OOM。对于mybatis的流式查询, 一边查询一边做业务处理 ,这样用过的数据写入流之后就可以GC回收掉内存空间,使内存得到合理应用, 避免了OOM的发生

你可能感兴趣的:(mybatis,java,jvm)