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>
    ```

  • 相关阅读:
    Android Studio快捷键
    Eclipse常用快捷键
    沉浸式状态栏
    JAVA起名规范
    c语言求数组长度
    自定义checkbox风格
    退出所有应用,监控打开了什么活动
    android权限大全
    广播接收者Receiver
    ImageView的常用属性
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/12658536.html
Copyright © 2011-2022 走看看