欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis Plus中的流式查詢案例

 更新時(shí)間:2022年08月17日 14:41:34   作者:Jon Kee  
這篇文章主要介紹了Mybatis Plus中的流式查詢案例,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis Plus流式查詢

mybatis plus 中自定義如下接口,就可以實(shí)現(xiàn)流式查詢,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大數(shù)據(jù)量流式查詢

一、在需要使用流式查詢的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)表數(shù)據(jù)庫訪問層
?*
?* @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;
? ? // 存儲每批數(shù)據(jù)的臨時(shí)容器
? ? 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);
? ? ? ? ? ? ? ? // 你可以看自己的項(xiàng)目需要分批進(jìn)行處理或者單個(gè)處理,這里以分批處理為例
? ? ? ? ? ? ? ? mallOrders.add(tblMallOrder);
? ? ? ? ? ? ? ? size++;
? ? ? ? ? ? ? ? if (size == BATCH_SIZE) {
? ? ? ? ? ? ? ? ? ? handle();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? //用來完成最后一批數(shù)據(jù)處理
? ? ? ? handle();
? ? }
? ? /**
? ? ?* 數(shù)據(jù)處理
? ? ?*/
? ? private void handle(){
? ? ? ? try{
? ? ? ? ? ? // 在這里可以對你獲取到的批量結(jié)果數(shù)據(jù)進(jìn)行需要的業(yè)務(wù)處理
? ? ? ? }catch (Exception e){
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }finally {
? ? ? ? ? ? // 處理完每批數(shù)據(jù)后后將臨時(shí)清空
? ? ? ? ? ? size = 0;
? ? ? ? ? ? mallOrders.clear();
? ? ? ? }
? ? }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Mybatis報(bào)Type interface *.*Mapper is not known to the MapperRegis

    Mybatis報(bào)Type interface *.*Mapper is not&

    本文主要介紹了Mybatis報(bào)Type interface *.*Mapper is not known to the MapperRegis,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • SpringBoot普通類獲取spring容器中bean的操作

    SpringBoot普通類獲取spring容器中bean的操作

    這篇文章主要介紹了SpringBoot普通類獲取spring容器中bean的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • SpringBoot啟動時(shí)自動執(zhí)行代碼的幾種實(shí)現(xiàn)方式

    SpringBoot啟動時(shí)自動執(zhí)行代碼的幾種實(shí)現(xiàn)方式

    這篇文章主要給大家介紹了關(guān)于SpringBoot啟動時(shí)自動執(zhí)行代碼的幾種實(shí)現(xiàn)方式,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • java構(gòu)建Stream流的多種方式總結(jié)

    java構(gòu)建Stream流的多種方式總結(jié)

    Java?8引入了Stream流作為一項(xiàng)新的特性,它是用來處理集合數(shù)據(jù)的一種函數(shù)式編程方式,本文為大家整理了多種java構(gòu)建Stream流的方式,希望對大家有所幫助
    2023-11-11
  • 一文總結(jié) Shiro 實(shí)戰(zhàn)教程

    一文總結(jié) Shiro 實(shí)戰(zhàn)教程

    shiro是apache的一個(gè)開源框架,是一個(gè)權(quán)限管理的框架,實(shí)現(xiàn) 用戶認(rèn)證、用戶授權(quán),這篇文章詳細(xì)總結(jié)了shiro用法,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • spring 聲明式事務(wù)實(shí)現(xiàn)過程解析

    spring 聲明式事務(wù)實(shí)現(xiàn)過程解析

    這篇文章主要介紹了spring 聲明式事務(wù)實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java調(diào)用webservice的.asmx接口的使用步驟

    java調(diào)用webservice的.asmx接口的使用步驟

    這篇文章主要介紹了java調(diào)用webservice的.asmx接口的使用步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java concurrency之共享鎖和ReentrantReadWriteLock_動力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency之共享鎖和ReentrantReadWriteLock_動力節(jié)點(diǎn)Java學(xué)院整理

    本篇文章主要介紹了Java concurrency之共享鎖和ReentrantReadWriteLock,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-06-06
  • 啟動Spring項(xiàng)目詳細(xì)過程(小結(jié))

    啟動Spring項(xiàng)目詳細(xì)過程(小結(jié))

    這篇文章主要介紹了啟動Spring項(xiàng)目詳細(xì)過程(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 詳解maven中央倉庫連不上的解決辦法

    詳解maven中央倉庫連不上的解決辦法

    這篇文章主要介紹了詳解maven中央倉庫連不上的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論