zoukankan      html  css  js  c++  java
  • MyBatis读取大量数据(流式读取)

    ## 一、背景
    导出大量数据时,虚拟机频繁GC,内存耗尽,CPU爆满,可采用Mybatis数据流式读取进行优化。

    ## 二、JDBC三种读取方式:
    1. 一次全部(默认):一次获取全部。
    2. 流式:多次获取,一次一行。
    3. 游标:多次获取,一次多行。

    mybatis默认采取第一种。

    ## 三、实现
    ### 1. Business层
    ```java
    //最终查询的List结果
    List<FinancePackageFutureResponseVO> financePackageFutureList = new ArrayList<>();
    financeOrderDao.seachDataList(financeOrderPackageRequestVO, new ResultHandler<FinancePackageFutureResponseVO>() {
        @Override
        public void handleResult(ResultContext<? extends FinancePackageFutureResponseVO> resultContext) {
            /**回调处理逻辑 */
            financePackageFutureList.add(resultContext.getResultObject());
        }
    });
    ```

    ### 2. Dao层
    ```java
    /**
     * 流式读取数据
     * @param financeOrderPackageRequestVO 查询对象
     * @param handler                      回调处理
     */
    void seachDataList(FinanceOrderPackageRequestVO financeOrderPackageRequestVO, ResultHandler<FinancePackageFutureResponseVO> handler);
    ```

    ### 3. Mapper层
    ```java
    <!--
    resultSetType:结果集的游标只能向下滚动
    fetchSize:窗口值
    -->
    <select id="seachDataList" resultMap="SeachDataResultMap" resultSetType="FORWARD_ONLY" fetchSize="1000">
        select i.created_date as createdDate, i.orde_order_inside_no as ordeOrderInsideNo from fina_finance_order_item_expense e
    </select>
    ```

  • 相关阅读:
    Spark-sql windows 下 执行错误.
    notepad ++ 注册表
    log4j 配置文件 示例
    linux 查看 进程 内存占用
    spring boot 常见错误解决
    python 轻量 web 框架 Bottle 使用
    Spring cloud eureka 添加 spring-security
    vue can‘ not resolver sass-loader 的 解决办法。
    外国人眼中的珍珠奶茶是啥?
    75.2亿美元:诺基亚、微软终于在一起
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/12658536.html
Copyright © 2011-2022 走看看