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

mybatis如何對大量數(shù)據(jù)的游標查詢

 更新時間:2024年01月27日 09:26:34   作者:喵主子  
這篇文章主要介紹了mybatis如何對大量數(shù)據(jù)的游標查詢問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

mybatis對大量數(shù)據(jù)的游標查詢

mapper定義

@Mapper
public interface NewsRepository {
 
    String simpleQuery="select news.id,news.title,news.keywords," +
            "    news.url,news.author," +
            "    data.content,news.inputtime,news.updatetime " +
            " from news news join news_data data on news.id=data.id";
 
    /**
     * 使用游標查詢數(shù)據(jù)數(shù)據(jù)
     * @return
     */
  
    @Select(value = simpleQuery +
            " where status=1" +
            " order by news.id asc")
    @Options(fetchSize = Integer.MIN_VALUE)//mysql情況比較特殊,只能這樣設(shè)置
    Cursor<News> scrollResult();
 
}

service內(nèi)使用

Cursor<News> cursor= repository.scrollResult();
Iterator<News> iter= cursor.iterator();
int count=0;
while (iter.hasNext()){
     System.err.println(iter.next().title);
     ..........
}

mybatis游標查詢 org.apache.ibatis.cursor.Cursor

先說使用場景:針對超大數(shù)據(jù),內(nèi)存不夠存儲數(shù)據(jù)。

假設(shè)有一個1千萬的日志數(shù)據(jù),需要將這一千萬的數(shù)據(jù),全部都清洗一遍,從每一條的數(shù)據(jù)中查詢出匹配的有效數(shù)據(jù),且不能修改原始數(shù)據(jù)。

第一種辦法

一次性查出來,內(nèi)存不夠,而且會很慢,不可取。

這種方法就直接放棄。

第二種辦法

分頁查詢, 每次查詢1000條,每次處理完后,再分頁查詢。

這種分頁查詢,分頁會很慢,除非是有索引id,通過順序讀取,還有可以優(yōu)化一下。

第三種辦法

游標查詢 org.apache.ibatis.cursor.Cursor

數(shù)據(jù)庫查詢DAO

TempStudent 數(shù)據(jù)POJO

  @Select(" SELECT * FROM temp_student ")
   Cursor<TempStudent> findListForCursor();

查詢的service

    @Transactional
    public void scanTempStudent() {
        Cursor<TempStudent> cursor = tempStudentDao.findListForCursor();
        
        cursor.forEach(foo -> {
            System.out.println(foo.getId() + ":" + foo.getName());
        });
    }

特別注意,需要加上一個注解 Transactional, 事物的注解

為什么呢?

在取數(shù)據(jù)的過程中需要保持數(shù)據(jù)庫連接,而 Mapper 方法通常在執(zhí)行完后連接就關(guān)閉了,因此 Cusor 也一并關(guān)閉了,所以加上了事物保障就可以

Spring 框架當中注解使用的坑:只在外部調(diào)用時生效。在當前類中調(diào)用這個方法,依舊會報錯。

總結(jié)

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

相關(guān)文章

  • springBoot靜態(tài)資源加載不到,并且配置了也不生效問題及解決

    springBoot靜態(tài)資源加載不到,并且配置了也不生效問題及解決

    這篇文章總結(jié)了一個在Spring Boot 2.6.x版本中,由于路徑匹配策略改變導(dǎo)致靜態(tài)資源無法加載的問題,并提供了解決方案:通過配置類或在配置文件中設(shè)置路徑匹配策略為AntPathMatcher,或者直接降級Spring Boot版本
    2025-02-02
  • SpringBoot全局異常處理之多個處理器匹配順序(最新推薦)

    SpringBoot全局異常處理之多個處理器匹配順序(最新推薦)

    這篇文章主要介紹了SpringBoot全局異常處理之多個處理器匹配順序(最新推薦),調(diào)試源碼可見匹配順序為:異常層級高者優(yōu)先,再清楚點,子類異常處理器優(yōu)先,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-03-03
  • java虛擬機參數(shù)-D、-X和-XX的區(qū)別小結(jié)

    java虛擬機參數(shù)-D、-X和-XX的區(qū)別小結(jié)

    本文主要介紹了java虛擬機參數(shù)-D、-X和-XX的區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解

    Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解

    這篇文章主要介紹了Springboot中@RequestParam和@PathVariable的用法與區(qū)別詳解,RESTful API設(shè)計的最佳實踐是使用路徑參數(shù)來標識一個或多個特定資源,而使用查詢參數(shù)來對這些資源進行排序/過濾,需要的朋友可以參考下
    2024-01-01
  • Java設(shè)計模式之工廠模式實現(xiàn)方法詳解

    Java設(shè)計模式之工廠模式實現(xiàn)方法詳解

    這篇文章主要介紹了Java設(shè)計模式之工廠模式實現(xiàn)方法,結(jié)合實例形式較為詳細的分析了工廠模式的分類、原理、實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下
    2017-12-12
  • SpringBoot定制三種錯誤頁面及錯誤數(shù)據(jù)方法示例

    SpringBoot定制三種錯誤頁面及錯誤數(shù)據(jù)方法示例

    Spring Boot提供的默認異常處理機制通常并不一定適合我們實際的業(yè)務(wù)場景,因此,我們通常會根據(jù)自身的需要對Spring Boot全局異常進行統(tǒng)一定制,例如定制錯誤頁面,定制錯誤數(shù)據(jù)等。本文主要介紹了SpringBoot三種自定義錯誤頁面的實現(xiàn),快來學(xué)習(xí)吧
    2021-12-12
  • Java中基于推、拉模式的sentinel規(guī)則持久化詳解

    Java中基于推、拉模式的sentinel規(guī)則持久化詳解

    這篇文章主要介紹了Java中基于推、拉模式的sentinel規(guī)則持久化詳解,推模式是sentinelDashboard?把規(guī)則推給Nacos,Nacos監(jiān)聽規(guī)則的變化推給微服務(wù),拉模式是sentinelDashboard?把規(guī)則直接給微服務(wù),?Nacos定時的同步微服務(wù)端的規(guī)則,需要的朋友可以參考下
    2023-09-09
  • 使用Java實現(xiàn)生命游戲串行代碼示例

    使用Java實現(xiàn)生命游戲串行代碼示例

    生命游戲是一種二維細胞自動機,由英國數(shù)學(xué)家在1970年發(fā)明,在游戲的過程中,細胞會形成各種有規(guī)律的結(jié)構(gòu),展現(xiàn)出生命的復(fù)雜性和多樣性,本文通過java和JavaFX實現(xiàn)了一個簡單的生命游戲,可以直觀的觀察到細胞的迭代過程,需要的朋友可以參考下
    2024-10-10
  • 全面解析Java中的HashMap類

    全面解析Java中的HashMap類

    HashMap類為Java提供了鍵值對應(yīng)的map類型,本文將從源碼角度全面解析Java中的HashMap類,同時包括其各種常用操作方法等,歡迎參考與借鑒
    2016-05-05
  • Java Scanner對象中hasNext()與next()方法的使用

    Java Scanner對象中hasNext()與next()方法的使用

    這篇文章主要介紹了Java Scanner對象中hasNext()與next()方法的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論