最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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情況比較特殊,只能這樣設置
    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ù)。

假設有一個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í)行完后連接就關閉了,因此 Cusor 也一并關閉了,所以加上了事物保障就可以

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

總結(jié)

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

相關文章

  • Java 十大排序算法之堆排序刨析

    Java 十大排序算法之堆排序刨析

    堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)而設計的一種排序算法,堆排序是一種選擇排序,它的最壞,最好,平均時間復雜度均為O(nlogn),它也是不穩(wěn)定排序。首先簡單了解下堆結(jié)構(gòu)
    2021-11-11
  • Eclipse插件大全 挑選最牛的TOP30(全)

    Eclipse插件大全 挑選最牛的TOP30(全)

    ?“Eclipse最牛的30個插件”不知道看官們是否了解,風少俠特意翻譯出來奉獻給各位,希望大家喜歡
    2013-02-02
  • Java和C#輸入輸出流的方法(詳解)

    Java和C#輸入輸出流的方法(詳解)

    下面小編就為大家?guī)硪黄狫ava和C#輸入輸出流的方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 深入解析Spring中的@Bean注解

    深入解析Spring中的@Bean注解

    這篇文章主要介紹了深入解析Spring中的@Bean注解,Spring的@Bean注解用于告訴方法,產(chǎn)生一個Bean對象,然后這個Bean對象交給Spring管理,產(chǎn)生這個Bean對象的方法Spring只會調(diào)用一次,隨后這個Spring將會將這個Bean對象放在自己的IOC容器中,需要的朋友可以參考下
    2023-07-07
  • Java進階學習之如何開啟遠程調(diào)式

    Java進階學習之如何開啟遠程調(diào)式

    Java開發(fā)中的遠程調(diào)試是一項至關重要的技能,特別是在處理生產(chǎn)環(huán)境的問題或者協(xié)作開發(fā)時,這篇文章主要介紹了Java進階學習之如何開啟遠程調(diào)式的相關資料,需要的朋友可以參考下
    2025-03-03
  • Java8中如何通過方法引用獲取屬性名詳解

    Java8中如何通過方法引用獲取屬性名詳解

    這篇文章主要給大家介紹了關于Java8中如何通過方法引用獲取屬性名的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 利用spring boot如何快速啟動一個web項目詳解

    利用spring boot如何快速啟動一個web項目詳解

    這篇文章主要給大家介紹了關于利用spring boot如何快速啟動一個web項目的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧、
    2017-12-12
  • Spring Security 密碼驗證動態(tài)加鹽的驗證處理方法

    Spring Security 密碼驗證動態(tài)加鹽的驗證處理方法

    小編最近在改造項目,需要將gateway整合security在一起進行認證和鑒權(quán),今天小編給大家分享Spring Security 密碼驗證動態(tài)加鹽的驗證處理方法,感興趣的朋友一起看看吧
    2021-06-06
  • Java實現(xiàn)三子棋小游戲簡易版

    Java實現(xiàn)三子棋小游戲簡易版

    這篇文章主要為大家詳細介紹了Java實現(xiàn)三子棋小游戲簡易版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java ShardingJDBC實戰(zhàn)演練

    Java ShardingJDBC實戰(zhàn)演練

    Sharding-JDBC 采用在 JDBC 協(xié)議層擴展分庫分表,是一個以 jar 形式提供服務的輕量級組件,其核心思路是小而美地完成最核心的事情
    2021-11-11

最新評論

扶绥县| 青岛市| 太保市| 长葛市| 赤壁市| 武鸣县| 阿克苏市| 东海县| 洞口县| 方山县| 舞钢市| 从江县| 慈溪市| 酒泉市| 迁西县| 库伦旗| 土默特左旗| 凤翔县| 密云县| 桦川县| 蒲江县| 建瓯市| 会昌县| 读书| 福贡县| 晋江市| 北碚区| 嵩明县| 麻栗坡县| 雷山县| 荥经县| 南城县| 磐安县| 彭阳县| 永仁县| 阿克陶县| 荔波县| 云南省| 泗水县| 铁岭县| 偃师市|