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连接Ldap
    REGEXP_LIKE,REGEXP_INSTR,REGEXP_SUBSTR,REGEXP_REPLACE
    正则表达式学习笔记
    旋转的播放按钮
    折叠table中的tr
    css选择器.md
    清除浮动.md
    jquery-validate使用.md
    EL表达式.md
    C标签的使用.md
  • 原文地址:https://www.cnblogs.com/windy13/p/11801813.html
Copyright © 2011-2022 走看看