{"id":8385,"date":"2024-03-14T08:01:39","date_gmt":"2024-03-14T08:01:39","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/"},"modified":"2025-08-03T04:10:41","modified_gmt":"2025-08-03T04:10:41","slug":"what-is-the-method-for-reading-data-using-mybatis-cursors","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/","title":{"rendered":"MyBatis Cursor: Read Large Data Efficiently"},"content":{"rendered":"<p>In MyBatis, you can use a cursor to fetch query results row by row. This allows avoiding loading all data into memory at once, making it useful for handling large amounts of data.<\/p>\n<p>The method for reading data using cursors is as follows:<\/p>\n<ol>\n<li>Define a method in the Mapper interface that returns a Cursor type, for example:<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code>Cursor&lt;User&gt; <span class=\"hljs-title function_\">getUserCursor<\/span><span class=\"hljs-params\">()<\/span>;\r\n<\/code><\/pre>\n<ol>\n<li>Write the corresponding SQL statements in the Mapper XML file, and use cursors to fetch data, for example:<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">select<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"getUserCursor\"<\/span> <span class=\"hljs-attr\">resultType<\/span>=<span class=\"hljs-string\">\"User\"<\/span> <span class=\"hljs-attr\">statementType<\/span>=<span class=\"hljs-string\">\"CALLABLE\"<\/span>&gt;<\/span>\r\n    {call get_users_cursor(#{result, mode=OUT, jdbcType=CURSOR, javaType=ResultSet})}\r\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">select<\/span>&gt;<\/span>\r\n<\/code><\/pre>\n<ol>\n<li>When calling the method of the Mapper interface, you can obtain a Cursor object to retrieve the query results row by row, for example:<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">try<\/span> (Cursor&lt;User&gt; cursor = userMapper.getUserCursor()) {\r\n    <span class=\"hljs-keyword\">while<\/span> (cursor.hasNext()) {\r\n        <span class=\"hljs-type\">User<\/span> <span class=\"hljs-variable\">user<\/span> <span class=\"hljs-operator\">=<\/span> cursor.next();\r\n        <span class=\"hljs-comment\">\/\/ \u5904\u7406\u6bcf\u4e00\u884c\u6570\u636e<\/span>\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>By using the above method, you can use a cursor to read the query result set line by line, avoiding loading all data into memory at once, improving performance and reducing memory consumption.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In MyBatis, you can use a cursor to fetch query results row by row. This allows avoiding loading all data into memory at once, making it useful for handling large amounts of data. The method for reading data using cursors is as follows: Define a method in the Mapper interface that returns a Cursor type, [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[11268,97,11269,10897,1459],"class_list":["post-8385","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-cursor","tag-database-query","tag-large-data","tag-memory-efficiency","tag-mybatis"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>MyBatis Cursor: Read Large Data Efficiently - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn MyBatis cursor method for memory-efficient large data fetching. Step-by-step guide included.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MyBatis Cursor: Read Large Data Efficiently\" \/>\n<meta property=\"og:description\" content=\"Learn MyBatis cursor method for memory-efficient large data fetching. Step-by-step guide included.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-14T08:01:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-03T04:10:41+00:00\" \/>\n<meta name=\"author\" content=\"Noah Thompson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Noah Thompson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/\"},\"author\":{\"name\":\"Noah Thompson\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/2e83cc6ab9f60d36921c2d0f9f280f4a\"},\"headline\":\"MyBatis Cursor: Read Large Data Efficiently\",\"datePublished\":\"2024-03-14T08:01:39+00:00\",\"dateModified\":\"2025-08-03T04:10:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/\"},\"wordCount\":138,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\"Cursor\",\"database query\",\"Large Data\",\"memory efficiency\",\"MyBatis\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/\",\"name\":\"MyBatis Cursor: Read Large Data Efficiently - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-14T08:01:39+00:00\",\"dateModified\":\"2025-08-03T04:10:41+00:00\",\"description\":\"Learn MyBatis cursor method for memory-efficient large data fetching. Step-by-step guide included.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MyBatis Cursor: Read Large Data Efficiently\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/2e83cc6ab9f60d36921c2d0f9f280f4a\",\"name\":\"Noah Thompson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/350e537e1530ede2762ee0237e877d6693f4f7163ab4f303202cc9a6b27b6cb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/350e537e1530ede2762ee0237e877d6693f4f7163ab4f303202cc9a6b27b6cb4?s=96&d=mm&r=g\",\"caption\":\"Noah Thompson\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/noahthompson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"MyBatis Cursor: Read Large Data Efficiently - Blog - Silicon Cloud","description":"Learn MyBatis cursor method for memory-efficient large data fetching. Step-by-step guide included.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/","og_locale":"en_US","og_type":"article","og_title":"MyBatis Cursor: Read Large Data Efficiently","og_description":"Learn MyBatis cursor method for memory-efficient large data fetching. Step-by-step guide included.","og_url":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-14T08:01:39+00:00","article_modified_time":"2025-08-03T04:10:41+00:00","author":"Noah Thompson","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Noah Thompson","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/"},"author":{"name":"Noah Thompson","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/2e83cc6ab9f60d36921c2d0f9f280f4a"},"headline":"MyBatis Cursor: Read Large Data Efficiently","datePublished":"2024-03-14T08:01:39+00:00","dateModified":"2025-08-03T04:10:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/"},"wordCount":138,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":["Cursor","database query","Large Data","memory efficiency","MyBatis"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/","url":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/","name":"MyBatis Cursor: Read Large Data Efficiently - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-14T08:01:39+00:00","dateModified":"2025-08-03T04:10:41+00:00","description":"Learn MyBatis cursor method for memory-efficient large data fetching. Step-by-step guide included.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/what-is-the-method-for-reading-data-using-mybatis-cursors\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"MyBatis Cursor: Read Large Data Efficiently"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/2e83cc6ab9f60d36921c2d0f9f280f4a","name":"Noah Thompson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/350e537e1530ede2762ee0237e877d6693f4f7163ab4f303202cc9a6b27b6cb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/350e537e1530ede2762ee0237e877d6693f4f7163ab4f303202cc9a6b27b6cb4?s=96&d=mm&r=g","caption":"Noah Thompson"},"url":"https:\/\/www.silicloud.com\/blog\/author\/noahthompson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/8385","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=8385"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/8385\/revisions"}],"predecessor-version":[{"id":153191,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/8385\/revisions\/153191"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=8385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=8385"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=8385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}