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

  • 相关阅读:
    徐汉彬:Web系统大规模并发——电商秒杀与抢购
    编程语言十一月份排行
    windows C 与 linux C区别?
    inux 下c/c++ 连接mysql数据库全过程-----已经通过验证
    MySql可视化工具MySQL Workbench使用教程
    C语言连接数据库
    C语言连接MySql数据库
    C语言位运算
    python-函数
    python2.x和python3.x共存
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/12658536.html
Copyright © 2011-2022 走看看