概述
先说使用场景:针对超大数据,内存不够存储数据。
假设有一个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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复