zoukankan      html  css  js  c++  java
  • MyBatis中ResultHandler的使用

    背景   

      有一种场景,导出文件100万条数据,如果直接mybatis把整个数据查询到list中。

      那么,就有一个问题,如果数据量大的话,就会导致大对象,内存溢出(OOM)。

      这个时候我们就可以利用Mybatis中的ResultHandler来处理。

     ResultHandler接口

      ResultHandler接口只有一个方法handleResult,这个方法的作用是:

        我们可以在这里添加处理每一条(sql查询返回的每一条数据)数据的逻辑。

      

    public class MyExport implements ResultHandler {
        
        @Override
        public void handleResult(ResultContext resultContext) {
            Object resultObject = resultContext.getResultObject();
            System.out.println(resultObject.toString());
            // TODO 在这里将每一条数据写入文件    
        }
    }
     void selectVideoList(ResultHandler<Video> resultHandler);
     <select id="selectVideoList"  resultType="com.pig.model.Video">
            select * from video limit 10
        </select>

    test方法

    @SpringBootTest(classes = HApplication.class)
    @RunWith(SpringRunner.class)
    public class MainTest {
    
        @Autowired
        private VideoMapper videoMapper;
    
        @Test
        public void test() {
            MyExport export = new MyExport();
            videoMapper.selectVideoList(export);
            System.out.println("ok");
        }
    
    }

    注意

      sql查询接口的返回值,类型为void。

      所以并没有接受这个返回值,不会产生大对象。

      只是在查询数据的过程中,处理了每一条数据,并没有保存数据在内存中。

    
    
  • 相关阅读:
    内存溢出和内存泄漏的区别
    java 23种设计模式 深入理解
    关于安装office注册表权限的解决方法
    Tomcat在Linux上的安装与配置
    初窥Linux 之 我最常用的20条命令
    redis使用初体验
    学习进度条——第12周
    找水王
    学习进度条——第11周
    学习进度条——第10周
  • 原文地址:https://www.cnblogs.com/windy13/p/11801813.html
Copyright © 2011-2022 走看看