Mybatis的Cursor使用 實現流式查詢

2021-10-17 04:20:23 字數 723 閱讀 4286

流式查詢指的是查詢成功後不是返回乙個集合而是返回乙個迭代器,應用每次從迭代器取一條查詢結果。流式查詢的好處是能夠降低記憶體使用

如果沒有流式查詢,我們想要從資料庫取 1000 萬條記錄而又沒有足夠的記憶體時,就不得不分頁查詢,而分頁查詢效率取決於表設計,如果設計的不好,就無法執行高效的分頁查詢。因此流式查詢是乙個資料庫訪問框架必須具備的功能。

在mybatis 3.4.0版本中新增了乙個功能,查詢可以返回cusror型別的資料,類似於jdbc裡的resultset類,當查詢百萬級的資料的時候,使用游標可以節省記憶體的消耗,不需要一次性取出所有資料,可以進行逐條處理或逐條取出部分批量處理

流式查詢的過程當中,資料庫連線是保持開啟狀態的,因此要注意的是:執行乙個流式查詢後,資料庫訪問框架就不負責關閉資料庫連線了,需要應用在取完資料後自己關閉。

例:

@transactional

public gracejsonresult getall

() throws ioexception }}

dosomething

;clear()

;}

它僅僅是在原來方法上面加了個 @transactional 註解。這個方案看上去最簡潔,但請注意 spring 框架當中註解使用的坑:只在外部呼叫時生效。在當前類中呼叫這個方法,依舊會報錯。

Mybatis游標Cursor查詢

通常對一張表中大量資料處理時由於資料量太大都要使用分頁分批查詢處理,否則資料量太大會導致oom等問題。cursor查詢適用於這種場景下可以替代分頁查詢的方案,cursor實現了closeable和iterable介面,我們可以通過迭代器來獲取資料進行處理。public inte ce cursore...

mybatis 動態SQL,sql裡使的各種標籤

id getempsbyconditionif resulttype com.mybatis.bean.employee select from tbl employee test id null id if test lastname null lastname and last name lik...

Cursor的簡單使用

使用過 sqlite 資料庫的童鞋對 cursor 應該不陌生,如果你是搞.net 開發你大可以把cursor理解成 ado.net 中的資料集合相當於datareader。今天特地將它單獨拿出來談,加深自己和大家對 android 中使用 cursor 的理解。關於 cursor 在你理解和使用 ...