91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MybatisPlus中的流式查詢怎么使用

發布時間:2022-08-17 16:25:16 來源:億速云 閱讀:1476 作者:iii 欄目:開發技術

本篇內容主要講解“MybatisPlus中的流式查詢怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MybatisPlus中的流式查詢怎么使用”吧!

    Mybatis Plus流式查詢

    mybatis plus 中自定義如下接口,就可以實現流式查詢,mybatis 中同樣適用。

    @Select("select * from t_xxx t ${ew.customSqlSegment}")
    @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
    @ResultType(ClearReconDiffAbnormalDO.class)
    void listByStream(@Param(Constants.WRAPPER) Wrapper<Model> wrapper, ResultHandler<Model> resultHandler);

    通用流式查詢

    編寫流式查詢的方法:

    public class FetchByStream extends AbstractMethod {
        private static final String METHOD = "fetchByStream";
        @Override
        public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
            String sqlFormat = "<script>\nSELECT %s FROM %s %s %s\n</script>";
            String sql = String.format(sqlFormat, sqlSelectColumns(tableInfo, true),
                    tableInfo.getTableName(), sqlWhereEntityWrapper(true, tableInfo),
                    sqlComment());
            SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
            String statementName = mapperClass.getName() + DOT + METHOD;
            if (configuration.hasStatement(statementName, false)) {
                logger.warn(LEFT_SQ_BRACKET + statementName + "] Has been loaded by XML or SqlProvider or Mybatis's Annotation, so ignoring this injection for [" + getClass() + RIGHT_SQ_BRACKET);
                return null;
            }
            /* 緩存邏輯處理 */
            return builderAssistant.addMappedStatement(METHOD, sqlSource, StatementType.PREPARED, SqlCommandType.SELECT,
                    Integer.MIN_VALUE, null, null, null, null, modelClass,
                    ResultSetType.FORWARD_ONLY, true, true, false, null, null, null,
                    configuration.getDatabaseId(), languageDriver, null);
        }
    }

    然后再注入通用方法,在Mapper 寫入下方的 method 即可使用。

    void fetchByStream(@Param(Constants.WRAPPER) Wrapper<T> wrapper, ResultHandler<T> handler);

    Mybatis Plus大數據量流式查詢

    一、在需要使用流式查詢的mapper文件中,定義流式查詢方法

    package com.unionpay.dao.db2;
     
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.unionpay.entity.TblMallOrder;
    import org.apache.ibatis.annotations.*;
    import org.apache.ibatis.mapping.ResultSetType;
    import org.apache.ibatis.session.ResultHandler;
     
    /**
     * (TblMallOrder)表數據庫訪問層
     *
     * @author liudong
     * @since 2020-09-15 17:07:13
     */
    @Mapper
    public interface TblMallOrderDao extends BaseMapper<TblMallOrder> {
        @Select("${sql}")
        @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
        @ResultType(TblMallOrder.class)
        void dynamicSelectLargeData1(@Param("sql") String sql, ResultHandler<TblMallOrder> handler);
     
        @Select("${sql}")
        @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
        @ResultType(Map.class)
        void dynamicSelectLargeData2(@Param("sql") String sql, ResultHandler<Map> handler);
    }

    二、使用示例

    @RestController
    public class TestSearchLargeData {
        // 這是每批處理的大小
        private final static int BATCH_SIZE = 1000;
        private int size;
        // 存儲每批數據的臨時容器
        private List<TblMallOrder> mallOrders;
     
        @Autowired
        private TblMallOrderDao tblMallOrderDao;
     
        @GetMapping("/getLargeData1")
        public void getLargeData1() {
            String sql = "select * from t_mall_order";
            tblMallOrderDao.dynamicSelectLargeData1(sql, new ResultHandler<TblMallOrder>() {
                @Override
                public void handleResult(ResultContext<? extends TblMallOrder> resultContext) {
                    TblMallOrder tblMallOrder = resultContext.getResultObject();
                    System.out.println(tblMallOrder);
                }
            });
        }
     
        @GetMapping("/getLargeData2")
        public void getLargeData2() {
            String sql = "select * from t_mall_order";
            tblMallOrderDao.dynamicSelectLargeData1(sql, new ResultHandler<TblMallOrder>() {
                @Override
                public void handleResult(ResultContext<? extends TblMallOrder> resultContext) {
                    TblMallOrder tblMallOrder = resultContext.getResultObject();
                    System.out.println(tblMallOrder);
                    // 你可以看自己的項目需要分批進行處理或者單個處理,這里以分批處理為例
                    mallOrders.add(tblMallOrder);
                    size++;
                    if (size == BATCH_SIZE) {
                        handle();
                    }
                }
            });
            //用來完成最后一批數據處理
            handle();
        }
        /**
         * 數據處理
         */
        private void handle(){
            try{
                // 在這里可以對你獲取到的批量結果數據進行需要的業務處理
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                // 處理完每批數據后后將臨時清空
                size = 0;
                mallOrders.clear();
            }
        }
    }

    到此,相信大家對“MybatisPlus中的流式查詢怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    容城县| 元氏县| 孙吴县| 北碚区| 理塘县| 武汉市| 德惠市| 廊坊市| 揭西县| 修水县| 芒康县| 饶河县| 普兰县| 徐州市| 德庆县| 北辰区| 安泽县| 商丘市| 科尔| 吉林市| 桐乡市| 宁远县| 高邑县| 巍山| 巴马| 皮山县| 三亚市| 淮滨县| 元氏县| 孟连| 旬阳县| 黎平县| 南投市| 宝应县| 云阳县| 五大连池市| 瑞安市| 汕头市| 辰溪县| 元阳县| 绥棱县|