我是靠谱客的博主 激情季节,最近开发中收集的这篇文章主要介绍mybatis游标查询 org.apache.ibatis.cursor.Cursor,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

先说使用场景:针对超大数据,内存不够存储数据。

假设有一个1千万的日志数据,需要将这一千万的数据,全部都清洗一遍,从每一条的数据中查询出匹配的有效数据,且不能修改原始数据。

第一种办法

一次性查出来,内存不够,而且会很慢,不可取。这种方法就直接放弃。

第二种办法

分页查询, 每次查询1000条,每次处理完后,再分页查询。
这种分页查询,分页会很慢,除非是有索引id,通过顺序读取,还有可以优化一下。

第三种办法

游标查询 org.apache.ibatis.cursor.Cursor

数据库查询DAO

TempStudent 数据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, 事物的注解
为什么呢?
在取数据的过程中需要保持数据库连接,而 Mapper 方法通常在执行完后连接就关闭了,因此 Cusor 也一并关闭了,所以加上了事物保障就可以

Spring 框架当中注解使用的坑:只在外部调用时生效。在当前类中调用这个方法,依旧会报错。

最后

以上就是激情季节为你收集整理的mybatis游标查询 org.apache.ibatis.cursor.Cursor的全部内容,希望文章能够帮你解决mybatis游标查询 org.apache.ibatis.cursor.Cursor所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部